26

Czy można zrobić gwiazdkę w podpowiedzi na czerwono, gdy używasz TextInputLayout z biblioteki wsparcia projektu? Widziałem informacje na temat stylizacji całej podpowiedzi, ale jest to trochę bardziej skomplikowane, ponieważ tylko * powinna być czerwona, a nie cała wiadomość.Jak zrobić gwiazdkę wskazówki TextInputLayout na czerwono dla wymaganych pól

Przykład projektowania materiałów pokazuje to, ale biblioteka projektowania nie ma żadnej opcji takiego stylu w przypadku użycia TextInputLayout i EditText.

odniesienia: https://www.google.com/design/spec/components/text-fields.html#text-fields-required-fields

Przykład (u góry, z naciskiem ma czerwoną gwiazdką; dolny bez naciskiem nie posiada czerwonego gwiazdka)

Example of hint text with red asterisk

Spojrzałem ustawienie podpowiedź do SpannableString (patrz tutaj How to get a red asterisk in a <string> entry) w OnFocusChangeListener (patrz tutaj: Having the mandatory symbol to the edit text (red color asterisk) which is inside the textinputlayout), ale wskazówka jest CharSequence.

Czy jest jakiś sposób, aby to zrobić bez rozszerzenia TextInputLayout?

+1

znaleźliście jakieś rozwiązanie? – praj

+1

Nie, obecnie planuję opuścić go tak, jak to jest, dopóki biblioteka projektowania nie obsługuje czerwonej gwiazdki. – ProjectJourneyman

+0

Kiedy używam tego, pasek nie wyświetla się pod moim tekstem EditText.Czy zrobiłeś coś specjalnego, żeby się pojawił? – fobbymaster

Odpowiedz

1
<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> 

cię zmienić motyw colorAccent i zobaczyć

+0

Zobacz [przykład materiałowy] (https://material.google.com/style/color.html#color-color-schemes), jest tam rozdział na ten temat. Powinieneś dodać te informacje w swojej odpowiedzi. Ale to może zmienić więcej rzeczy niż się spodziewano. – AxelH

-1

Tak Jest to możliwe, ponieważ robię to samo w moim bieżącej aplikacji. a dla skupienia i nieostrości trzeba zrobić jakąś logikę, aby usunąć gwiazdkę.

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); 
+0

nope nie może tego zrobić za pomocą TextInputLayout: https://code.google.com/p/android/issues/detail?id=197889 – Roubachof

-1

byłem przez ten sam proces i pracował dla mnie

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; 
} 
+0

Ta logika jest zastosowana do TextView, a wymagana wartość TextInputLayout nie działa – Jutikorn

0

mógłbyś być dodanie ciąg łączony z 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); 
    } 

Zmień wskazówkę po ustawieniu ostrości.

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

Zmień TextInputLayout wskazówkę dodając postfix zawinięte w HTML:

public void setRequired(boolean required) { 

    componentField.setHint(
    TextUtils.concat(
     componentField.getHint(), 
     Html.fromHtml(
     getContext().getString(
      R.string.required_asterisk)))); 
} 

kod Asterisk powinny być przechowywane w android strings.xml dla prawidłowego ucieczce:

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

dla mnie. Czy to naprawdę działa dla Ciebie? – Jutikorn

3

Materiał Projekt określić gwiazdka dla wymaganych pól, które są częścią tekstu podpowiedzi i tego samego koloru (nie na czerwono, jak pokazano w pytaniu).

W Kotlin jest naprawdę prosta:

1.Define ta metoda rozszerzenie:

fun TextInputLayout.markRequired() { 
    hint = "$hint *" 
} 

2.Wykorzystanie nim:

input_first_name.markRequired() 
+0

Witam, daj mi swój ans android przy użyciu java. będę wymagał tego typu TextInputLayout używając. – mujjuraja

+0

@mujjuraja Jest dużo brzydsza w Javie, polecam [try.kotl.in] (https://try.kotl.in), ale oto, co możesz zrobić: 'inputFirstName.setHint (inputFirstName.getHint() +" * ")" –

Powiązane problemy