Разные цвета в подсказке
Я использую TextInputLayout
за подсказку в EditText
,
Теперь я хочу дать подсказку TextInputLayout
с 2 цветами.
Как на изображении:
Это возможно? Я попытался добавить текст в формате HTML, но он не работает.
Код для текста редактирования:
<android.support.design.widget.TextInputLayout
android:id="@+id/pv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Property Value"
android:layout_marginTop="5dp"
app:hintTextAppearance="@style/HintText"
>
<com.app.aspirehomeloans.FontClass.Edittext_RobotoRegular
android:id="@+id/login_emailid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="@dimen/edittext_size"
android:paddingTop="3dp"
android:imeOptions="actionNext"
android:paddingBottom="3dp"
android:background="@android:color/transparent"
android:inputType="textNoSuggestions|textEmailAddress"
android:textColor="@color/edittextcolor"
android:textCursorDrawable="@null"
android:text=""
android:nextFocusDown="@+id/login_password"
/>
<View
android:id="@+id/login_email_line"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/divercolor"
/>
</android.support.design.widget.TextInputLayout>
3 ответа
Попробуйте этот код
String text = "<font color=#307575>Property</font> <font color=#bdd95b> Value</font>";
TextInputLayout textInputLayoutObj = (TextInputLayout)findViewById(R.id.text_input_layout_id);
textInputLayoutObj .setHint(Html.fromHtml(text));
Вы можете использовать SpannableString для достижения этого, что-то вроде этого должно работать:
# 1 Сначала установите подсказку в вашем xml
файл для примера: "Значение свойства"
# 2 Затем используйте этот метод, чтобы добавить красную звездочку к подсказке:
private void addRedAsterisk(EditText editText){
String text = editText.getHint().toString();
String asterisk = " *";
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(text);
int start = builder.length();
builder.append(asterisk);
int end = builder.length();
builder.setSpan(new ForegroundColorSpan(Color.RED), start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setHint(builder);
}
ОБНОВИТЬ
Как вы используете TextInputLayout
этот метод не будет работать, так как в настоящее время настройка разных цветов в подсказке не поддерживается в TextInputLayout
,
Тем не менее, вы можете получить частичные результаты, используя следующий класс, т. Е. Вы получите красную звездочку, когда hint
в развернутом состоянии, но не в свернутом состоянии:
public class HintColorHelper {
public static void setUpHintColor(EditText editText, TextInputLayout textInputLayout){
textInputLayout.setHintTextAppearance(0);
String hint = textInputLayout.getHint().toString();
final SpannableStringBuilder hintWithAsterisk = getHintWithAsterisk(hint);
if(!editText.hasFocus()){
textInputLayout.setHint(null);
editText.setHint(hintWithAsterisk);
}
setOnFocuschangeListener(editText, textInputLayout, hintWithAsterisk);
}
private static void setOnFocuschangeListener(final EditText editText, final TextInputLayout textInputLayout, final SpannableStringBuilder hintWithAsterisk){
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) {
textInputLayout.setHint(hintWithAsterisk);
editText.setHint(null);
} else if(editText.getText().toString().length()==0){
textInputLayout.setHint(null);
editText.setHint(hintWithAsterisk);
}
}
});
}
private static SpannableStringBuilder getHintWithAsterisk(String hint){
String asterisk = " *";
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(hint);
int start = builder.length();
builder.append(asterisk);
int end = builder.length();
builder.setSpan(new ForegroundColorSpan(Color.RED), start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return builder;
}
}
Чтобы использовать это, просто используйте статический метод setUpHintColor(editText, textInputLayout)
из HintColorHelper
класс как это:
HintColorHelper.setUpHintColor(yourEditText, yourTextInputLayout);
Вот вывод:
AFAIK, вы не можете сделать это с помощью XML, вы должны сделать это программно, и я предлагаю вам использовать Spanabble String
TextView textvw = (TextView)findViewById(R.id.mytext);
String txthint = "Property value ";
String astrk= "*";
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(txthint);
int start = builder.length();
builder.append(astrk);
int end = builder.length();
builder.setSpan(new ForegroundColorSpan(Color.RED), start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textvw .setText(builder);