11

我想知道如何设置 Android 4.0 的下拉弹出窗口的样式SearchView

我正在使用Theme.Sherlock.Light.DarkActionBar,但我不知道如何将下拉搜索设置为白色背景和黑色文本?

4

2 回答 2

8

出于某种原因,使用“searchAutoCompleteTextView”的主题也不适合我。所以我在设置我的 SearchView 时使用以下代码解决了它:

注意:这都是通过 android v7 支持/AppCompat 库完成的

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.search_menu, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);

    // Theme the SearchView's AutoCompleteTextView drop down. For some reason this wasn't working in styles.xml
    SearchAutoComplete autoCompleteTextView = (SearchAutoComplete) searchView.findViewById(R.id.search_src_text);

    if (autoCompleteTextView != null) { 
        autoCompleteTextView.setDropDownBackgroundResource(R.drawable.abc_search_dropdown_light);
    }
}

兼容性库提供了两个搜索下拉资源,它们是

  • R.drawable.abc_search_dropdown_light(浅色背景)
  • R.drawable.abc_search_dropdown_dark(深色背景)
于 2013-09-24T13:49:37.197 回答
2

这样做有多个步骤

首先,您需要创建一个具有四种状态的自定义drawable,您可以参考{ABSLibrary}/res/drawable/abs__list_selector_holo_dark.xml。它会是这样的:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_window_focused="false" android:drawable="@android:color/transparent" />

<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/abs__list_selector_disabled_holo_dark" />
<item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@drawable/abs__list_selector_disabled_holo_dark" />
<item android:state_focused="true"                                android:state_pressed="true" android:drawable="@drawable/abs__list_selector_background_transition_holo_dark" />
<item android:state_focused="false"                               android:state_pressed="true" android:drawable="@drawable/abs__list_selector_background_transition_holo_dark" />
<item android:state_focused="true"                                                             android:drawable="@drawable/abs__list_focused_holo" />

将上面的自定义 drawable(.xml 格式)保存到您自己的项目 res/drawable 中。通过参考上面的示例相应地编辑样式。请注意,样式可能嵌套得很深,请耐心向下看。

然后创建(或放入现有的自定义主题)具有以下内容的自定义主题,它应保存为 res/values/styles.xml:

<style name="Theme.MyCustomTheme" parent="Theme.Sherlock.Light.DarkActionBar">
<item name="searchAutoCompleteTextView">@style/MySearchAutoCompleteTextView</item></style>

<style name="MySearchAutoCompleteTextView" parent="Sherlock.__Widget.SearchAutoCompleteTextView">
<item name="android:dropDownSelector">@drawable/myCustomDrawable_DropDown</item>
<item name="android:popupBackground">@drawable/myCustomDrawable_popupBackground</item></style>

请注意“myCustomDrawable_DropDown”和“myCustomDrawable_popupBackground”必须是您刚刚创建的自定义drawable的名称。

您只需要知道“android:dropDownSelector”和/或“android:popupBackground”负责自动完成弹出框的主题化。

最后,在您的清单中应用主题!

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.MyCustomTheme" > ...
于 2012-10-24T18:37:35.530 回答