Как сделать TextInputLayout намекнуть звездочку красным на обязательные поля

Возможно ли сделать только звездочку в подсказке красным при использовании TextInputLayout из библиотеки поддержки дизайна? Я видел информацию о стилизации всего намека, но это немного сложнее, поскольку только * должен быть красным, а не всем сообщением.

Пример Material Design показывает это, но библиотека дизайна, похоже, не имеет возможности стилизовать ее таким образом, используя TextInputLayout и EditText.

Ссылка: https://www.google.com/design/spec/components/text-fields.html#text-fields-required-fields

Пример (сверху, с фокусом, есть красная звездочка, внизу без фокуса нет красной звездочки):

Пример текста подсказки с красной звездочкой

Я посмотрел на настройку подсказки на SpannableString (см. Здесь, как получить красную звездочку в записи <string> ) в OnFocusChangeListener (см. Здесь Имея обязательный символ для текста редактирования (звездочка красного цвета), который находится внутри textinputlayout ) , Но подсказка – CharSequence.

Есть ли способ сделать это без расширения TextInputLayout?

Solutions Collecting From Web of "Как сделать TextInputLayout намекнуть звездочку красным на обязательные поля"

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/black</item> </style> 

Измените тему colorAcent и посмотрите

Да Это возможно, потому что я делаю то же самое в своем текущем приложении. И для фокуса и нефокусировки вы должны сделать некоторую логику, чтобы удалить звездочку.

 String mm = "Legal first name"; Spannable WordtoSpan = new SpannableString(mm); WordtoSpan.setSpan( new ForegroundColorSpan(Color.parseColor("#e62e6c")), 16, mm.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); WordtoSpan.setSpan(new RelativeSizeSpan(0.9f), 16, mm.length(), 0); view.setText(WordtoSpan); 

Я прошел через один и тот же процесс, и это сработало для меня

  TextView text = (TextView) rootView.findViewById(R.id.name_textview); SpannableStringBuilder builder1 = setStarToLabel("Name"); text.setText(builder1); @NonNull private SpannableStringBuilder setStarToLabel(String text) { String simple = text; String colored = "*"; SpannableStringBuilder builder = new SpannableStringBuilder(); builder.append(simple); int start = builder.length(); builder.append(colored); int end = builder.length(); builder.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return builder; } 

Не могли бы вы добавить строку из Html?

  String grey = "Legal first name*"; Spanned redStar; String html = "<string style="color:grey;">Legal first name<span style="color:red;">*</span></string>"; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { redStar = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY); } else { redStar = Html.fromHtml(html); } 

И измените намек на фокус.

  textInput.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) myEditText.setHint(redStar.toString); else myEditText.setHint(grey); } 

Измените подсказку TextInputLayout, добавив postfix, завернутый в html:

 public void setRequired(boolean required) { componentField.setHint( TextUtils.concat( componentField.getHint(), Html.fromHtml( getContext().getString( R.string.required_asterisk)))); } 

Код Asterisk должен храниться в файле android strings.xml для правильного экранирования:

 <string name = "required_asterisk"><![CDATA[<font color=\'#cc0029\'>&nbsp*</font>]]></string> 

Использовать специальную тему для требуемого текстового просмотра

В вашем файле стиля настройте свой стиль шрифта, например:

 <style name="CustomFontStyle"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:capitalize">characters</item> <item name="android:typeface">monospace</item> <item name="android:textSize">12pt</item> <item name="android:textColor">#00FF00</item>/> </style> 

И в вашем тексте примените этот стиль пользовательского шрифта, например:

 <TextView android:text="TextView" style="@style/CustomFontStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView14" android:layout_weight="1" />