自动完成文本视图浮动提示

15

我尝试了很多方法,但是无法使用支持库中的TextInputLayout来使AutoCompleteTextView浮动提示正常工作。

这个问题是否有解决方法,或者需要使用外部库?


你可以使用Design Library来完成它。请发布你的代码,这样我可以更好地帮助你。 - Danilo Prado
2
请解释一下“不能工作”的意思。换句话说,您需要为我们提供一个问题的最小完整可验证示例 - CommonsWare
2个回答

29

不需要。

设计库本身就足够了

像这样包含:

<android.support.design.widget.TextInputLayout
    android:id="@+id/til_id"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="125dp"
    >

    <AutoCompleteTextView
        android:id="@+id/auto_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Id"
        android:singleLine="true"/>
</android.support.design.widget.TextInputLayout>

谢谢,我有一个特定的布局不起作用,我正在努力找出我的错误。 - Marcelo Baccelli
你想在那个链接上展示什么?完全没有用。你能具体指出代码中的某个类或行吗? - delkant
@delkant,之前有回答的代码,但是随着时间推移,仓库已经更新。感谢指出。 - N J
1
感谢您的澄清! - delkant
2
2020年,这仍然有效。尽管我想指出一个小的设计问题,即TextInputEditText添加了一个AutoCompleteTextView没有的填充。因此,在AutoCompleteTextView中添加填充android:padding="16dp"将使其看起来与以前完全相同。 - ansh sachdeva

0

可能有点晚了,但这是诀窍:

创建以下类:

public class AutoCompleteTextInputLayout extends TextInputLayout {

    private boolean mIsHintSet;
    private CharSequence mHint;

    public AutoCompleteTextInputLayout(Context context) {
        super(context);
    }

    public AutoCompleteTextInputLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void addView(View child, int index, ViewGroup.LayoutParams params) {
        if (child instanceof EditText) {
            mHint = ((EditText) child).getHint();
        }
        super.addView(child, index, params);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (!mIsHintSet && ViewCompat.isLaidOut(this)) {
            setHint(null);

            EditText editText = getEditText();
            if (editText == null) {
                return;
            }
            CharSequence currentEditTextHint = editText.getHint();
            if (!TextUtils.isEmpty(currentEditTextHint)) {
                mHint = currentEditTextHint;
                editText.setHint("");
            }
            setHint(mHint);
            mIsHintSet = true;
        }
    }
}

现在将这行代码添加到你的布局文件中,看看效果。
<com.example.AutoCompleteTextInputLayout
    android:id="@+id/text_input_autocomplete"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <AutoCompleteTextView
        android:id="@+id/autocomplete_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:textColorHint="@color/textColorDarkHint"/>
</com.example.AutoCompleteTextInputLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接