【问题标题】:TextInputLayout doesn't show hint when focused if the hint was set programmatically如果以编程方式设置提示,则 TextInputLayout 在聚焦时不显示提示
【发布时间】:2017-10-16 22:06:19
【问题描述】:

我正在这样做:

<android.support.design.widget.TextInputLayout
                android:id="@+id/inputLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <AutoCompleteTextView
                    android:id="@+id/email"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="textEmailAddress"
                    android:maxLines="1"
                    android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>

然后是这个:

mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
mEmailView.setHint("Email");

提示显示在EditText 上,但在聚焦时不在其上方。我可以在TextInputLayout 上设置提示,但随后我会在EditText 中的提示同时得到它。这是一个错误还是我做错了什么?

谢谢。

【问题讨论】:

    标签: android android-support-library android-design-library


    【解决方案1】:

    不要在子 EditText 上使用 setHint(),而应该直接在 TextInputLayout 上调用它:

    TextInputLayout textInputLayout = (TextInputLayout)findViewById(R.id.inputLayout);
    textInputLayout.setHint("Email");
    

    这应该是开箱即用的,没有额外的“黑客”。

    TextInputLayout 确实尝试从内部 EditText 提示初始化其提示,但它仅在创建时执行此操作,如果未找到它,它什么也不做,所以这就是为什么你需要让它“尝试再次”通过调用setHintEnabled()...

    我想文档应该更清楚地描述这种细微差别。

    【讨论】:

      【解决方案2】:

      明白了,对我来说似乎是一个错误。

      基本上我必须:

          mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
          mEmailView.setHint("Email");
          TextInputLayout textInputLayout= (TextInputLayout) 
          findViewById(R.id.inputLayout);
          textInputLayout.setHintEnabled(false);
          textInputLayout.setHintEnabled(true);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 2018-11-03
        • 1970-01-01
        • 2016-11-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多