web-dev-qa-db-fra.com

Problème de double indice pour TextInputLayout et EditText

Je veux définir l'indice avec Java dans EditText (qui est dans TextInputLayout).

Code utilisé pour le réglage:

aET = (EditText) findViewById(R.id.aET); aET.setHint("h?");

Mais même lorsque edittext est activé, Hint est affiché deux fois (dans edittext également).

S'il vous plaît laissez-moi savoir si quelqu'un avait fait face et trouvé une solution de contournement

quand editText est activé ...

Second

quand editText n'est pas centré ..

First

EDIT [10 juillet 2015]:

<Android.support.design.widget.TextInputLayout
     Android:id="@+id/aTIL"
     Android:layout_width="match_parent"
     Android:layout_height="wrap_content">
     <EditText
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:id="@+id/aET" />
</Android.support.design.widget.TextInputLayout>
23
karsas

J'ai trouvé la solution!

Dans votre EditText, ajoutez 

Android:textColorHint="@Android:color/transparent"

Et dans le code définir l'indicateur de la EditText

aET.setHint("h?");

L'indice dans votre editText est masqué et l'indice du TextInputLayout est affiché.

MODIFIER :

Autre solution (Le meilleur)

Mettre à jour Graddle avec la nouvelle version d'Android: design

compile 'com.Android.support:design:22.2.1'
10
acs-team

Ce problème se produit car l'indicateur du fichier XML est transmis à TextInputLayout. Il peut donc être affiché sous forme d'indicateur flottant. Mais lorsque vous le définissez par programme, l'indicateur est défini sur EditText, ce qui génère deux indicateurs (l'un du xml qui est un indicateur flottant et l'autre que vous définissez par programme et qui est un indicateur normal d'EditText). Si vous souhaitez modifier l'indicateur flottant, vous devez définir l'indicateur sur TextInputLayout.

Votre code ressemblera alors à ceci:

aTIL = (TextInputLayout) findViewById(R.id.aTIL);
aTIL.setHint("h?");
36
neits

J'ai aussi eu ce problème. 

lorsque j'ai eu besoin de mettre à jour le conseil, je l'ai fait (à tort) sur EditText et sur TextInputLayout, ce qui a entraîné un flou.

la solution consistait à ne pas appeler EditText.setHint() mais seulement TextInputLayout.setHint()

12
axd

première dépendance à la compilation compile 'com.rengwuxian.materialedittext: library: 2.1.3'

ajoutez ceci dans votre xml 

<com.rengwuxian.materialedittext.MaterialEditText    
Android:id="@+id/etId"    
Android:layout_width="match_parent"    
Android:layout_height="70dip"    
Android:hint="Hint goes here"    
Android:textColor = "#000000"    
Android:textSize="15sp"    
app:met_accentTypeface="fonts/yourcustomfonts.ttf"   
app:met_floatingLabel="normal"    
app:met_floatingLabelTextColor="#ff0000"    
app:met_floatingLabelTextSize="15sp"    
app:met_hideUnderline="true"    
app:met_textColorHint="#ff00ff"    
app:met_typeface="fonts/yourcustomfont.ttf"/>

add xmlns: app = "http://schemas.Android.com/apk/res-auto"

1
Ram Mandal

Utilisation simple, cela fonctionne par programme pour moi

    TextInputLayout til = new TextInputLayout(this);
    til.setHintTextAppearance(Android.R.style.TextAppearance_Large);

Vous pouvez personnaliser le style comme je le mentionne ci-dessous ...

<style name="TextInputLayout" parent="@Android:style/TextAppearance">
        <item name="Android:textColor">@color/colorPrimaryDark</item>
        <item name="Android:textColorHint">@color/colorPrimaryDark</item>
        <item name="Android:textSize">23sp</item>
    </style>

TextInputLayout til = new TextInputLayout(this);
        til.setHint("hai);
        til.setHintTextAppearance(R.style.TextInputLayout);
0
Gowthaman M

Vous pouvez y aller en utilisant deux textes d'indices. Un pour le TextInputLayout et un autre pour le texte d'édition à l'intérieur. Le texte suivant est la référence:

<Android.support.design.widget.TextInputLayout
                                    style="@style/editText_layout"
                                    Android:id="@+id/entryScreenProduction_editText_percentCompleted_layout"
                                    Android:hint="%Completed">

                                    <EditText
                                        Android:id="@+id/entryScreenProduction_editText_percentCompleted"
                                        style="@style/editTextNotes"
                                        Android:gravity="center_vertical|top"
                                        Android:inputType="numberDecimal"
                                        Android:textAlignment="viewStart"
                                        Android:hint="0.0"/>
</Android.support.design.widget.TextInputLayout>

Mais cela a un problème. L'interface utilisateur ressemblera à celle ci-dessous. Les indications se chevaucheront .  enter image description here

Pour éviter l'interface utilisateur laide ci-dessus, vous devez la contrôler depuis programme. Définissez le texte de conseil de EditText uniquement lorsque le champ est actif, sinon supprimez le texte de conseil.

Android:hint="0.0"

Supprimez la ligne ci-dessus du fichier XML de mise en page et procédez comme suit:

m_editText_completed = (EditText) findViewById(R.id.entryScreenProduction_editText_percentCompleted);
m_editText_completed.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                if(b){
                    m_editText_completed.setHint("0.0");
                }
                else {
                    m_editText_completed.setHint("");
                }
            }
        });

J'espère que cela résout votre problème. God Speed ​​!!!

0
Akhil Ghatiki