Ayant le symbole obligatoire pour le texte d'édition (couleur rouge astérisque) qui est à l'intérieur du textinputlayout
j'ai un texte d'édition à l'intérieur d'un textinputlayout. J'essaie de définir le symbole de champ obligatoire (astérisque de couleur rouge) au texte d'édition. J'ai placé l'indication sur le texte d'édition. Mon code est comme ci-dessous.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" * "
android:layout_gravity="center_vertical"
android:textColor="#ff0000"
android:textSize="15sp" />
<android.support.design.widget.TextInputLayout
android:id="@+id/tilEngNo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<EditText
android:id="@+id/engineno"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="15dp"
android:layout_marginRight="16dp"
android:hint="Engine No" />
</android.support.design.widget.TextInputLayout>
</LinearLayout>
cela me donne le symbole d'astérisque à l'extérieur du textinputlayout. Alors, quand je commence à taper dans l'édition de texte, l'indice de flotteurs, mais pas le symbole astérisque. Mon exigence est de faire le symbole d'astérisque pour se comporter comme l'indice du texte d'édition. Quel est la meilleure approche?. Toute aide est appréciée. Merci d'avance
3 réponses
supposons que vous ayez des textes D'édition pour les valeurs obligatoires. Vous voulez que l'indice soit un astérisque rouge suivi du texte en gris clair.
après les textes D'édition vous avez l'explication: TextView avec astérisque rouge suivi de texte "= champ est requis"
dans mon cas j'ai utilisé ceci:
showEditTextsAsMandatory ( joinEmailET, joinNameET, passwordET, confirmPasswordET );
showTextViewsAsMandatory ( ( TextView ) findViewById ( R.id.requiredText ) );
public void showEditTextsAsMandatory ( EditText... ets )
{
for ( EditText et : ets )
{
String hint = et.getHint ().toString ();
et.setHint ( Html.fromHtml ( "<font color=\"#ff0000\">" + "* " + "</font>" + hint ) );
}
}
public void showTextViewsAsMandatory ( TextView... tvs )
{
for ( TextView tv : tvs )
{
String text = tv.getText ().toString ();
tv.setText ( Html.fromHtml ( "<font color=\"#ff0000\">" + "* " + "</font>" + text ) );
}
}
vous pouvez faire cela en utilisant un petit truc , I. e vous devez changer layout_gravity
quand OnFocusChangeListener
appelé en code Java. Exemple:
//Set OnFocusChangeListener for EditText
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
//astriskText is Object of your textview contains * as text
if (hasFocus) {
//if edittext has focus then move it to top
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) astriskText.getLayoutParams();
lp.gravity= Gravity.TOP;
astriskText.setLayoutParams(lp);
} else if(edittext.getText().toString().length()==0){
//else check if edittext is empty then move it back to center
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) astriskText.getLayoutParams();
lp.gravity= Gravity.CENTER_VERTICAL;
astriskText.setLayoutParams(lp);
}
}
});
essayez de joindre votre indice TextInputLayout avec Postfix empaqueté en html:
public void setRequired(boolean required) {
componentField.setHint(
TextUtils.concat(
componentField.getHint(),
Html.fromHtml(
getContext().getString(
R.string.required_asterisk))));
}
le code Asterisk doit être stocké dans les chaînes android.xml pour corriger échapper:
<string name = "required_asterisk"><![CDATA[<font color=\'#cc0029\'> *</font>]]></string>