我想制作一个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>
答案 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");
}
}
});
动画对我来说足够好而不会禁用动画:
答案 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>
如果在文本字段为空时也应显示占位符,只需添加 expandedHintEnabled =“ false” :
<com.google.android.material.textfield.TextInputLayout
app:expandedHintEnabled="false"
注意:expandedHintEnabled
至少需要版本1.3.0-alpha03
。
答案 4 :(得分:-1)
进入xml文本编辑模式并将其添加到edittext:
android:label="Phone Number"
android:hint="+6281342134"
答案 5 :(得分:-2)
如果您希望label
和hint
位于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>