我想以ShareActionProvider
ActionBarSherlock 为主题。我的问题是我成功地自定义了 ActionBar 的样式,但我无法设置来自 ActionBarSherlock 的共享弹出窗口的样式。
在上面的屏幕截图中,您可以看到共享弹出窗口使用默认样式,而普通的更多弹出窗口以我喜欢的方式设置样式。
我通过源代码挖掘了更多,并在ActivityChooserView
此方法中找到:
private IcsListPopupWindow getListPopupWindow() {
if (mListPopupWindow == null) {
mListPopupWindow = new IcsListPopupWindow(getContext());
//...
据我所知,这是负责创建ShareActionProvider
. 正如您在上面看到的,IcsListPopupWindow
创建了一个新实例。以下是 的构造函数IcsListPopupWindow
:
public IcsListPopupWindow(Context context) {
this(context, null, R.attr.listPopupWindowStyle);
}
public IcsListPopupWindow(Context context, AttributeSet attrs, int defStyleAttr) {
mContext = context;
mPopup = new PopupWindow(context, attrs, defStyleAttr);
mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
}
到目前为止com.actionbarsherlock.R.attr.listPopupWindowStyle
使用的attr。虽然这个 attr 被插入了一个和两个参数构造函数,但它IcsListPopupWindow
创建了一个新PopupWindow
的,其 attrcom.android.internal.R.attr.popupWindowStyle
似乎等于android.R.attr.popupWindowStyle
:
public PopupWindow(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.popupWindowStyle);
}
public PopupWindow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
mContext = context;
mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
TypedArray a =
context.obtainStyledAttributes(
attrs, com.android.internal.R.styleable.PopupWindow, defStyleAttr, defStyleRes);
mBackground = a.getDrawable(R.styleable.PopupWindow_popupBackground);
// ...
在那里您可以看到背景图像是从名为styleable.PopupWindow_popupBackground
. 我试图用这个 xml 文件应用我的风格:
<style name="Theme.MyStyle" parent="@style/Theme.Sherlock.Light.DarkActionBar">
<!-- ... -->
<item name="actionDropDownStyle">@style/DropDownNav.MyStyle</item>
<item name="dropDownListViewStyle">@style/DropDownListView.MyStyle</item>
<item name="actionBarItemBackground">@drawable/selectable_background_mystyle</item>
<item name="listPopupWindowStyle">@style/DropDownNav.MyStyle</item>
<item name="android:listPopupWindowStyle">@style/DropDownNav.MyStyle</item>
</style>
<style name="DropDownNav.MyStyle" parent="@style/Widget.Sherlock.Spinner.DropDown.ActionBar">
<item name="android:popupBackground">@drawable/menu_dropdown_panel_mystyle</item>
<item name="android:divider">#081925</item>
<item name="android:dividerHeight">1dp</item>
</style>
<style name="DropDownListView.MyStyle" parent="@style/Widget.Sherlock.ListView.DropDown">
<item name="android:divider">#081925</item>
<item name="android:dividerHeight">1dp</item>
</style>
但它不起作用。我究竟做错了什么?
顺便说一句,如果有人能给我一个关于 styleable 和 attr 东西的好教程,我会很高兴,但我没有做对。