2

ShareActionProviderActionBarSherlock のテーマを設定したいと思います。私の問題は、ActionBar のスタイルを正常にカスタマイズしたことですが、ActionBarSherlock からの共有ポップアップのスタイルを設定できないことです。

共有とメニューの例

上のスクリーンショットでは、共有ポップアップがデフォルトのスタイルを使用しているのに対し、通常のmoreポップアップは私の好みのスタイルになっていることがわかります。

ソースコードをさらに掘り下げたところ、次の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持つ新しい作成された 1 つおよび 2 つのパラメーター コンストラクター:PopupWindowcom.android.internal.R.attr.popupWindowStyleandroid.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 に答える