【问题标题】:How to use TextInputLayout in new android design library如何在新的 android 设计库中使用 TextInputLayout
【发布时间】:2015-08-14 19:12:27
【问题描述】:

最近google推出了新的Android设计库,介绍了如何使用TextInputLayout字段来启用EditText的Floating Hint功能。

here 提供的指导不多。

这个页面说

您现在可以将其包装在 TextInputLayout 中

但不知道,因为智能预测 (Ctrl+SPACE) 不会预测 TextInputLayout 的任何属性。所以我的问题是:

我们如何获取该组件底层的 EditText?

我们如何从 EditText 中获取数据?

【问题讨论】:

  • 问题清晰有用...
  • 这个问题很清楚也很有用,因为设计库的实现没有太多可用的指南!
  • 检查this tutorial,很有帮助。

标签: android android-design-library


【解决方案1】:

经验法则:TextInputLayout 应该包装 TextInputEditText 而不是普通的 EditText。

原因? TextInputEditText 是 EditText 的子类,旨在用作 TextInputLayout 的子类。

此外,使用 EditText 会向我们发出警告:添加的 EditText 不是 TextInputEditText。请改用该类。

【讨论】:

    【解决方案2】:

    Material Components Library 有一个新的TextInputLayout 组件。

    只需使用:

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint_text">
    
      <com.google.android.material.textfield.TextInputEditText
          android:layout_width="match_parent"
          android:layout_height="wrap_content"/>
    
    </com.google.android.material.textfield.TextInputLayout>
    

    official doc你可以找到所有的信息。

    【讨论】:

      【解决方案3】:

      正确的方法...

      <android.support.design.widget.TextInputLayout
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:padding="10dp">
      
                  <android.support.design.widget.TextInputEditText
                      android:id="@+id/card_id_edit_text"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:hint="@string/form_card_id_text"
                      android:inputType="number"
                      android:maxLength="10"/>
              </android.support.design.widget.TextInputLayout>
      

      如果您像 TextInputLayout 的子项一样使用 EditText,您将在 Android Monitor 中看到此消息:

      I/TextInputLayout:添加的 EditText 不是 TextInputEditText。请改用该类。

      【讨论】:

        【解决方案4】:

        我们也可以使用 AppCompactEditText 来添加支持:appcompat in gradle

         <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="20dp">
        
            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/et_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/hint"
                android:maxLength="100"
                android:inputType="textNoSuggestions"
                android:textColor="@color/colorPrimary"
                android:textSize="@dimen/font_size_large" />
        
        </android.support.design.widget.TextInputLayout>
        

        【讨论】:

          【解决方案5】:

          请将TextInputLayout 包裹在TextInputEditText 周围,而不是EditText

          环绕EditText 在横向模式下确实存在问题。参考 this article 了解更多详情。

          <android.support.design.widget.TextInputLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content">
          
               <android.support.design.widget.TextInputEditText
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:hint="hint"
                  android:id="@+id/editText1" />
          
          </android.support.design.widget.TextInputLayout>
          

          【讨论】:

            【解决方案6】:
            <android.support.design.widget.TextInputLayout
                android:id="@+id/til_message"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
            
                <EditText
                    android:id="@+id/et_message"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/type_message"
                    android:maxLines="5"/>
            
            </android.support.design.widget.TextInputLayout>
            

            一旦您开始输入编辑文本,提示将自动向上移动,并且出现在文本输入布局上的编辑文本集错误下方出现的错误,例如不是在编辑文本上

            tilMessage.setError("Message field is empty!");
            

            禁用错误

            tilMessage.setErrorEnabled(false);
            

            【讨论】:

              【解决方案7】:

              为了使其正常工作,您应该让您的应用主题从 Theme.AppCompat(或其后代)主题扩展,就像从 Theme.AppCompat.Light.NoActionBar 扩展一样。

              【讨论】:

                【解决方案8】:

                这是在“用于编辑文本的浮动标签”下的design support library 中定义的。

                     <android.support.design.widget.TextInputLayout
                            android:id="@+id/name_et_textinputlayout"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="@dimen/activity_vertical_margin">
                
                            <EditText
                                android:id="@+id/FeedBackerNameET"
                                android:layout_width="fill_parent"
                                android:layout_height="wrap_content"
                                android:hint="hinttext"
                                android:inputType="textPersonName|textCapWords" />
                     </android.support.design.widget.TextInputLayout>
                

                【讨论】:

                  【解决方案9】:

                  TextInputLayout 扩展 ViewGroup 类。 因此,这意味着您必须将您的 EditText 包装在 TextInputLayout 中。

                  <android.support.design.widget.TextInputLayout
                       android:layout_width="match_parent"
                       android:layout_height="wrap_content">
                  
                       <EditText
                          android:layout_width="match_parent"
                          android:layout_height="wrap_content"
                          android:hint="hint"
                          android:id="@+id/editText1" />
                  
                  </android.support.design.widget.TextInputLayout>
                  

                  【讨论】:

                  • @moictab 它在设计支持库中,因此适用于 API 7+。
                  • 好吧,我已经在 API 19 中尝试过,但在膨胀视图时出现异常。也许我做错了什么。
                  • 我已经尝试过您的解决方案并在我的棒棒糖设备上运行它,但 TextInputLaayout 不起作用
                  • @moictab 确保将 compile 'com.android.support:design:22.2.0' 添加到您的 gradle 依赖项中。
                  • TextInputLayout 真的很好。我只是在这里遵循本指南>>charmndroid.blogspot.in/2015/06/…。它说你必须初始化 TextInputLayout 而不是 EditText 然后控制!
                  猜你喜欢
                  • 2015-08-13
                  • 1970-01-01
                  • 2021-08-29
                  • 2017-09-25
                  • 2017-04-04
                  • 1970-01-01
                  • 2021-01-24
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多