TextInputLayout的不同标签和提示

时间:2016-06-10 04:54:50

标签: android android-textinputlayout

我想制作一个EditTextLayout,但我想为标签和提示添加不同的文字。

例如:标签的文本是“电话号码”,提示文本是 “6281342134”。

有可能吗?

我的代码是:

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

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

6 个答案:

答案 0 :(得分:34)

我对Rehan采取了类似的方法

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

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            inputLayout.setHint("We did it!");
        } else {
            inputLayout.setHint("Testing 123");
        }
    }
});

动画对我来说足够好而不会禁用动画:

Example

答案 1 :(得分:13)

以下是我在没有代码(只是XML)的情况下执行此操作,同时同时允许标签和占位符,如材料设计指南中所示。

布局XML:

<android.support.design.widget.TextInputLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:hint="My Label Text">
  <android.support.design.widget.TextInputEditText
    android:id="@android:id/input"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColorHint="@drawable/hint_selector"
    android:hint="Placeholder Text"/>
</android.support.design.widget.TextInputLayout>

颜色选择器XML:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_focused="true" android:color="?android:textColorHint" />
  <item android:color="@android:color/transparent" />
</selector>

此处的关键是默认情况下使其透明,并仅在焦点处显示占位符文本。无需改变颜色,因为这将尊重任何自定义主题,以及明暗主题。

答案 2 :(得分:4)

你可以这样做:

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

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

但这会导致两个提示重叠,即电话号码 +6281342134 。所以你需要为此实现OnFocusChangeListener。 (不是那么好的解决方案,但它对你有用)。

在您的布局中,仅向TextInputLayout添加提示。我已将hintAnimationEnabled设置为false,因为我认为动画可能看起来不会有不同的提示。

<android.support.design.widget.TextInputLayout
    android:id="@+id/phone_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Phone Number"
    app:hintAnimationEnabled="false">

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

在您的java文件中,创建OnFocusChangeListener

private View.OnFocusChangeListener onPhoneNumberFocusChangeListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            ((EditText)v).setHint("+6281342134");
        } else {
            ((EditText)v).setHint("");
        }
    }
};

并将其设置为EditText

phone.setOnFocusChangeListener(onPhoneNumberFocusChangeListener);

答案 3 :(得分:2)

您可以使用以下属性:

  • android:hint :用于标签

  • placeholderText :用于EditText

    中的占位符文本
          <com.google.android.material.textfield.TextInputLayout
              android:id="@+id/phone_layout"
              android:layout_width="match_parent"
              android:hint="Phone Number"
              app:placeholderText="+6281342134"
              android:layout_height="wrap_content">
    
              <com.google.android.material.textfield.TextInputEditText
                  android:id="@+id/phone"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:hint="+6281342134"
                  android:inputType="phone" />
    
          </com.google.android.material.textfield.TextInputLayout>
    

enter image description here

如果在文本字段为空时也应显示占位符,只需添加 expandedHintEnabled =“ false”

        <com.google.android.material.textfield.TextInputLayout
            app:expandedHintEnabled="false"

enter image description here

注意expandedHintEnabled至少需要版本1.3.0-alpha03

答案 4 :(得分:-1)

进入xml文本编辑模式并将其添加到edittext:

android:label="Phone Number"
android:hint="+6281342134"

答案 5 :(得分:-2)

如果您希望labelhint位于EditText之内,可以将这些属性设置为EditText

android:label="Phone Number"
android:hint="+6281342134"

但是,如果您希望label显示为其他文本容器,可以使用以下视图heirarchy。

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/phoneLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textSize="22sp" 
            andrioid:text="phone number"/>

       <EditText
            android:id="@+id/phoneText"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:textSize="22sp"
            android:hint="+6281342134" />

    </LinearLayout>