29

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

用于设置提示的代码:

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

但即使在edittext 获得焦点时,Hint 也会显示两次(也在 edittext 内部)。

请让我知道是否有人遇到过并找到一些解决方法

当editText被聚焦时......

第二

当editText没有聚焦时..

第一的

编辑[2015 年 7 月 10 日]:

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

8 回答 8

42

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

您的代码将如下所示:

aTIL = (TextInputLayout) findViewById(R.id.aTIL);
aTIL.setHint("h?");
于 2015-07-09T12:33:18.573 回答
12

我找到了解决方案!

在您的 EditText 添加

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

并在代码中设置来自 EditText 的提示

aET.setHint("h?");

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

编辑 :

其他解决方案(最好的)

使用新版本的 android:design 更新 Gradle

compile 'com.android.support:design:22.2.1'
于 2015-07-19T14:04:04.737 回答
12

我也有这个问题。

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

解决方案是不打电话EditText.setHint(),而只是TextInputLayout.setHint()

于 2015-10-27T15:30:02.480 回答
3

您可以使用两个提示文本。一个用于 TextInputLayout,另一个用于其中的编辑文本。以下是参考:

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

但这有一个问题。UI 如下所示。提示将重叠。 在此处输入图像描述

为了避免上述丑陋的UI,您必须从程序中控制它。仅当焦点在该字段上时才设置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("");
                }
            }
        });

我希望这能解决你的问题。神速!!!

于 2018-01-15T06:27:08.333 回答
1

先编译依赖 compile '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"

于 2015-07-06T17:47:17.420 回答
0

简单地以编程方式使用它对我有用

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

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

<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);
于 2017-12-28T16:33:26.690 回答
0

就我而言,我在 kotlin 中遵循这行代码

科特林代码

val edPasswordSignIn = findViewById<TextInputEditText>(R.id.edPasswordSignIn)
        edPasswordSignIn.setHint("Password")

        edPasswordSignIn.setOnFocusChangeListener { v, hasFocus ->
            if (hasFocus){
                edPasswordSignIn.setHint("Password")
            }
            else
                edPasswordSignIn.setHint("")
        }

XML 代码

<!--TextInput layout which acts as a wrapper to the edit text-->
<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColorHint="#f29358"
    app:hintTextAppearance="@style/TextAppearance.AppCompat.Large"
 app:passwordToggleEnabled="true"
 app:passwordToggleTint="@color/colorPrimary"
    app:boxStrokeWidth="0dp"
    app:boxStrokeWidthFocused="0dp"

    android:scrollbarSize="25dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
    android:gravity="fill_vertical"

app:layout_constraintTop_toTopOf="parent">

<!--Using the TextInputEditText,which is
    same as the edit text,but remember-->
<!--that we need to use TextInputEditText
    with TextInputLayout-->
    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/edPasswordSignIn"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@null"
        android:backgroundTint="@color/white"
        android:gravity="center|left"
        android:inputType="textPassword"
        android:paddingTop="-2dp"
        android:paddingBottom="-1dp"

        android:textSize="@dimen/_11sdp" />
</com.google.android.material.textfield.TextInputLayout>

在输入文本之前

在此处输入图像描述

输入文字后

在此处输入图像描述

于 2022-01-10T13:08:48.507 回答
0
<com.google.android.material.textfield.TextInputLayout
                android:id="@+id/textInputLayout"
                app:hintEnabled="false"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/textField"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:hint="Hint" />

            </com.google.android.material.textfield.TextInputLayout>

应用程序:hintEnabled="假"

这足以隐藏默认标签。

于 2022-01-25T12:27:48.177 回答