2

我想以ShareActionProviderActionBarSherlock 为主题。我的问题是我成功地自定义了 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 东西的好教程,我会很高兴,但我没有做对。

4

1 回答 1

3

我能够通过覆盖此 ABS 样式来覆盖 popupBackground 颜色:

<style name="Widget.Sherlock.Light.ListPopupWindow" parent="Widget">
    <item name="android:popupBackground">#333333</item>
</style>

希望这能让你继续前进。如果您能够自己解决它,请与我们分享您如何设置其余属性的样式。干杯

于 2013-09-26T19:41:16.077 回答