TextInputLayout和EditText双提示问题

时间:2015-07-06 16:47:13

标签: android android-edittext android-appcompat android-textinputlayout

我想在EditText(在TextInputLayout中)中使用java设置提示。

用于设置提示的代码:

Select a.id, a.name, b.name as fav from table a inner join table b on a.f_id = b.id

但是即使在关注edittext时,提示也会显示两次(也在edittext内)。

如果有人面对并找到了一些解决方法,请告诉我

当editText聚焦时

Second

当editText未聚焦时

First

编辑[2015年7月10日]:

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

7 个答案:

答案 0 :(得分:36)

出现此问题的原因是xml中的提示传递给TextInputLayout,因此它可以显示为浮动提示。但是当你以编程方式设置它时,提示被设置为EditText,然后产生两个提示(一个来自xml,它是一个浮动提示,一个是以编程方式设置的,是一个正常的EditText提示)。如果要更改浮动提示,则必须在TextInputLayout上设置提示。

您的代码将如下所示:

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

答案 1 :(得分:12)

我也遇到过这个问题。

当我需要更新提示时,我(错误地)在EditTextTextInputLayout上都这样做了,这导致了模糊。

解决方案是不调用EditText.setHint(),而只调用TextInputLayout.setHint()

答案 2 :(得分:11)

我找到了解决方案!

在EditText中添加

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

在代码中设置EditText的提示

aET.setHint("h?");

隐藏editText中的提示,并显示TextInputLayout中的提示。

编辑:

其他解决方案(最佳)

使用新版本的android:design

更新Graddle
compile 'com.android.support:design:22.2.1'

答案 3 :(得分:2)

您可以使用两个提示文字。一个用于TextInputLayout,另一个用于其中的编辑文本.Below是引用:

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

但这有一个问题。用户界面如下所示。提示将重叠。 enter image description here

为了避免上述丑陋的用户界面,你必须从程序中控制它。只有当字段有焦点时才设置EditText的提示文本,否则删除提示文本。

android:hint="0.0"

从布局xml文件中删除上面的行,并执行以下操作:

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("");
                }
            }
        });

我希望这能解决你的问题。上帝速度!!!

答案 4 :(得分:1)

首先编译依赖项 编译'com.rengwuxian.materialedittext:library:2.1.3'

在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"/>

添加xmlns:app =“http://schemas.android.com/apk/res-auto”

答案 5 :(得分:0)

以编程方式简单地使用它为我工作

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

您可以自定义样式,如下所示......

org.json

答案 6 :(得分:0)

尝试在文本输入布局中编写提示

 <com.google.android.material.textfield.TextInputLayout
 style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="@string/password">