AutocompleteTextview和CompletionHintView

时间:2010-08-31 20:54:01

标签: android autocompletetextview

我目前正在使用AutocompleteTextView组件实现自动填充字段。

我正在尝试使用结果数添加完成提示,并且只想以与下拉列表元素不同的方式设置样式。 组件上有一个名为completionHintView的属性,但每次我给它一个我之前定义的布局时,它会抛出一个NullPointerException

有没有人有关于如何设置完成提示样式的工作示例?

1 个答案:

答案 0 :(得分:5)

您能详细说明您想申请的样式吗?

如果它只是基本的文本样式,您可以构建Spannable并使用结果设置完成提示,因为它接受CharSequencethis post中说明了构建Spannable并将样式应用于它的示例。

如果您正在寻找一种方法来实际操作TextView的参数(例如填充),AutoCompleteTextView的{​​{3}}似乎提供了一个提示(双关语)。

private View getHintView(Context context) {
    if (mHintText != null && mHintText.length() > 0) {
        final TextView hintView = (TextView) LayoutInflater.from(context).inflate(
                mHintResource, null).findViewById(com.android.internal.R.id.text1);
        hintView.setText(mHintText);
        hintView.setId(HINT_VIEW_ID);
        return hintView;
    } else {
        return null;
    }
}

这表明Android会在您指定的资源引用中查找标识text1。这种资源的最基本版本除了TextView之外只包含此ID:

<?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:padding="10dp"
        android:textColor="#FF0000" android:textSize="16sp" />

将上方保存在布局文件中(例如completion_hint_view.xml)并从AutoCompleteTextView

中按如下方式引用它
<AutoCompleteTextView android:id="@+id/autocomplete_textview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:completionHintView="@layout/completion_hint_view"/>

第二个选项可能是最容易使用的,并且可以让您完全访问TextView的参数。如果您需要在此视图中对文本应用多种样式,则可以合并第一个建议,因为这样可以提供更大的灵活性。

如果这些建议都不够,我可以想到一些不太优雅的工作,可能会让你得到相同的结果。