Разные цвета в подсказке

Я использую 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);
Другие вопросы по тегам