我正在尝试在SearchView
中自定义ActionBar
。剩下的最后一件事是设置建议下拉分隔符颜色。在早期我发现,由于一些不可想象的原因,一个不仅仅是样式SearchView
,大多数东西只在运行时可以设置样式,你必须谷歌许多不同的黑客来实现你想要的外观。
我使用AppCompat版本,但我认为这个过程非常相似。首先,我检索SearchView
:
searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.search));
我在源代码中发现,下拉列表隐藏在AutoCompleteTextView
的某个内部扩展名中,但仍可通过其ID访问:
AutoCompleteTextView actv = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
现在接下来的任务是在AutoCompleteTextView
内设置分隔符的样式。问题是AutoCompleteTextView本身是一个TextView
,里面包含ListPopupWindow(参见AutoCompleteTextView.java源代码中的mPopup变量),最终有所需的getListView
方法,ListView有我真正想要使用的setDivider
和setDividerHeight
方法。但ListPopupWindow是在运行时创建的,只在需要时显示,而且它是私有成员,所以我不知道如何访问它。
再一次,简化的结构是ActionBar > SearchView > AutoCompleteTextView > ListPopupWindow > ListView
。我找到了所有箭头的方法但只有一个(AutoCompleteTextView
> ListPopupWindow
)。
其他替代方法是使用XML来设置样式,但正如我之前提到的,样式ActionBar
尤其是SearchView
非常麻烦,我真的不知道如何通过阅读源代码来实现它代码。
我发现使用Google的唯一方法是在主题中设置所有下拉分隔符(例如this),但它不适用于SearchView
下拉列表,我不知道为什么。
任何能帮助我的人至少有一点?
谢谢!
答案 0 :(得分:0)
好吧,所以我终于发现将整个主题从Holo.Light.DarkActionBar更改为Holo.Light要简单得多,因为分隔符的颜色已经在那里好了,我只需要将ActionBar设置为黑暗版本,但这很容易,花了大约20分钟:))