需要使用 TextInputLayout 在 EditText 中进行双重提示
Need to make double hint in EditText with TextInputLayout
这是双重提示的问题 -
我也需要这样做。我需要两个提示。一个是 EditText 的标题,第二个是没有输入时可能的值。
可惜只有一个标签:
android:hint
我可以用它做点什么吗?
UPD1:
答案是以编程方式为 EditText 设置提示,并在 xml 中为 TextInputLayout 设置提示。
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:hint="@string/prompt_quantity"
android:layout_height="wrap_content">
<EditText
android:id="@+id/quantity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:maxLines="1"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
和
quantityEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
quantityEditText.setHint(hasFocus ? "0" : "");
}
});
只需检查您的输入并根据输入更改提示:
EditText editText = (EditText)findViewById(R.id.editText);
editText.addTextChangedListener(new TextWatcher()
{
@Override
public void afterTextChanged(Editable s)
{
if(editText.getText().toString().equals(""))
editText.setHint("");
else
editText.setHint("Your normal hint");
}
});
试试这个方法
xml布局
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/non_active_edit_text"
android:focusable="false"
android:gravity="right|center_vertical"
android:hint="Right"
android:paddingTop="4dp"
android:background="@null"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/active_edit_text"
android:hint="Left"
android:layout_gravity="center_horizontal"/>
</merge>
JAVA class
public class TwoHints extends RelativeLayout{
EditText activeField;
EditText nonActiveEditText;
final CharSequence hint;
public TwoHints(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.two_hints_edit_text, this);
activeField = (EditText)findViewById(R.id.active_edit_text);
nonActiveEditText = (EditText)findViewById(R.id.non_active_edit_text);
hint = nonActiveEditText.getHint();
activeField.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
nonActiveEditText.setHint(s.length() !=0 ? "" : hint);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
xml
的编辑文本
<you.package.TwoHints
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"/>
借助 Material 组件库,您可以使用
android:hint="Label"
添加浮动标签
app:placeholderText="Placeholder Text"
在 EditText
. 中添加一个占位符
使用类似于:
<com.google.android.material.textfield.TextInputLayout
android:hint="Label"
app:placeholderText="Placeholder Text"
..>
<com.google.android.material.textfield.TextInputEditText />
</com.google.android.material.textfield.TextInputLayout>
注意: 至少需要 1.2.0-alpha03
.
版本
这是双重提示的问题 -
我也需要这样做。我需要两个提示。一个是 EditText 的标题,第二个是没有输入时可能的值。
可惜只有一个标签:
android:hint
我可以用它做点什么吗?
UPD1:
答案是以编程方式为 EditText 设置提示,并在 xml 中为 TextInputLayout 设置提示。
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:hint="@string/prompt_quantity"
android:layout_height="wrap_content">
<EditText
android:id="@+id/quantity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:maxLines="1"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
和
quantityEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
quantityEditText.setHint(hasFocus ? "0" : "");
}
});
只需检查您的输入并根据输入更改提示:
EditText editText = (EditText)findViewById(R.id.editText);
editText.addTextChangedListener(new TextWatcher()
{
@Override
public void afterTextChanged(Editable s)
{
if(editText.getText().toString().equals(""))
editText.setHint("");
else
editText.setHint("Your normal hint");
}
});
试试这个方法
xml布局
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/non_active_edit_text"
android:focusable="false"
android:gravity="right|center_vertical"
android:hint="Right"
android:paddingTop="4dp"
android:background="@null"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/active_edit_text"
android:hint="Left"
android:layout_gravity="center_horizontal"/>
</merge>
JAVA class
public class TwoHints extends RelativeLayout{
EditText activeField;
EditText nonActiveEditText;
final CharSequence hint;
public TwoHints(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.two_hints_edit_text, this);
activeField = (EditText)findViewById(R.id.active_edit_text);
nonActiveEditText = (EditText)findViewById(R.id.non_active_edit_text);
hint = nonActiveEditText.getHint();
activeField.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
nonActiveEditText.setHint(s.length() !=0 ? "" : hint);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
xml
的编辑文本<you.package.TwoHints
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"/>
借助 Material 组件库,您可以使用
android:hint="Label"
添加浮动标签app:placeholderText="Placeholder Text"
在EditText
. 中添加一个占位符
使用类似于:
<com.google.android.material.textfield.TextInputLayout
android:hint="Label"
app:placeholderText="Placeholder Text"
..>
<com.google.android.material.textfield.TextInputEditText />
</com.google.android.material.textfield.TextInputLayout>
注意: 至少需要 1.2.0-alpha03
.