android - 如何在 Android 中设置自定义搜索建议列表的样式

标签 android android-actionbar searchview

我根据 this tutorial 实现了内容提供者的自定义建议;它有效,但是我在设置建议列表的样式时遇到问题。我目前的建议列表是黑底白字。我想将其更改为白色背景和黑色文本。我在网上做了一些搜索,并在 styles.xml 文件中尝试了类似的东西:

<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
    <item name="suggestionRowLayout">@layout/list_item_search_suggestion</item>
</style>
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="searchViewStyle">@style/MySearchViewStyle</item>
</style>

我的 list_item_search_suggestion 看起来像这样:

    <?xml version="1.0" encoding="utf-8"?>
<TextView
    android:id="@android:id/text1"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:gravity="center_vertical"
    android:minHeight="56dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:textColor="@android:color/black"
    tools:text="Blah blah blah"/>

但是,当我运行应用程序并搜索内容时,它会在建议列表出现之前崩溃。我从 SuggestionsAdapter 中的 newView 方法得到 NullPointerException。这个 SuggestionAdapter 来自 SDK,我没有实现我自己的适配器。我只是实现内容提供程序并将其设置在 searchable.xml 中。堆栈轨道也是这样的:

06-15 21:11:09.253    4063-4063/com.tophatter E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.tophatter, PID: 4063
java.lang.NullPointerException
        at android.support.v7.widget.SuggestionsAdapter.newView(SuggestionsAdapter.java:249)
        at android.support.v7.widget.SuggestionsAdapter.getView(SuggestionsAdapter.java:453)
        at android.widget.AbsListView.obtainView(AbsListView.java:2255)
        at android.widget.ListPopupWindow$DropDownListView.obtainView(ListPopupWindow.java:1585)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
        at android.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1167)
        at android.widget.ListPopupWindow.show(ListPopupWindow.java:554)
        at android.widget.AutoCompleteTextView.showDropDown(AutoCompleteTextView.java:1096)
        at android.widget.AutoCompleteTextView.updateDropDownForFilter(AutoCompleteTextView.java:971)
        at android.widget.AutoCompleteTextView.onFilterComplete(AutoCompleteTextView.java:953)
        at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:285)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5001)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)

最佳答案

我想通了。基本上 SuggestionsAdapter 指的是一些我没有在我的自定义建议行布局中提供的小部件。所以我从源代码中复制了默认的自定义建议行布局,并将背景和文本颜色更改为我的自定义布局。现在可以使用了。

关于android - 如何在 Android 中设置自定义搜索建议列表的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858557/

相关文章:

Android - 屏幕中的图像散射

android - fragment 中 RecyclerView 上的 SearchView

选择建议后 Android Searchview 禁用全屏不起作用

android - ScrollingToolbarLayout 没有 "up"按钮

android - 如何从 Android 手机读取所有 SSL 流量?

android - 传递给 dlfree 的地址无效

标签 View 中的 Android 操作栏搜索

android - 检查后退按钮是否在操作栏或菜单按钮中可见

android - 如何禁用 xamarin 表单中操作栏菜单的滑动?

android - 使用带工具栏的 SearchView,加载 Activity 时如何打开键盘?