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
demandé sur Shruthi Kamoji 2015-10-29 15:19:21

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 ) );
    }
}
2
répondu Dan 2016-09-13 23:21:05

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);
                }
            }
        });
0
répondu Jaiprakash Soni 2015-10-29 13:33:58

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\'>&nbsp*</font>]]></string>
0
répondu Zon 2017-07-25 10:35:56