Android - 如何在 EditText 上制作 2 个提示?

标签 android xml android-edittext textview hint

我知道我可以为 EditText 设置提示文本。
目前,我只是使用空格来分隔 2 个提示。但是,右侧的提示文本没有与 EditText 的右侧对齐。

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp"
        android:hint="LEFT                RIGHT" />

我想要的是如下样式: enter image description here

如何为单个 EditText 在左侧创建一个提示,在右侧创建另一个提示?

最佳答案

您好,您的问题很有趣。在EditText的源代码中可以看到hint只是CharSequence。无法设置双重提示。但是您可以创建自己的 View 来允许这样做。看看我的解决方案。非常简单而且有效。

two_hints_edit_text.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>

EditTextWithTwoHints.java文件

public class EditTextWithTwoHints extends RelativeLayout{

    EditText activeField;
    EditText nonActiveEditText;

    final CharSequence hint;

    public EditTextWithTwoHints(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.EditTextWithTwoHints
        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"/>

此外,您可以创建自己的属性,使您的 View 更易于使用。

关于Android - 如何在 EditText 上制作 2 个提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28514674/

相关文章:

java - 保存实际进度progressBar onSaveInstanceState

android - 将原生 Google 帐户选择器与 B2C 结合使用

android - 如何为使用 Flet (python) 开发的应用程序构建 APK 文件

java - SOAP - 非常大的 XML 响应 - OutOfMemoryError

javascript - documentElement 没有子元素

Android 8.0 Oreo 在聚焦 TextInputEditText 时崩溃

android - 您如何以编程方式结束 2.3+ 上的通话?

java - 根据按钮高度调整按钮文本大小

android - EditText.getText().toString() 显示错误

Android:如何完全禁用 Edittext 中的复制和粘贴功能