14

を使用する場合Theme.Sherlock.Light.DarkActionBar(またはTheme.Holo.Light.DarkActionBar、違いはありません)、たとえばテキストを選択するときに表示される ActionMode (または「コンテキスト ActionBar」) は、デフォルトで、標準の暗いテーマと同じ方法でスタイル設定されます。つまり、濃い青と明るい色です。アクション アイコン。

ただし、ダイアログ (このテーマでは黒の ActionBar とは対照的に明るいスタイル) でテキストを選択しようとすると、代わりに、明るいテーマ (白い背景) と同じスタイルの ActionMode が表示されます。問題は、そのアクション アイコンが本来あるべきほど暗くなく、明るく、効果的に見えなくなっていることです。

ここに画像の説明を入力

これは、背景がライト テーマから取られたように見えますが (ライト ダイアログのため)、アイコンはダーク テーマから取られました。Light.DarkActionBarこれはテーマのバグですか?それについて何かできることはありますか?

4

8 に答える 8

2

これをテーマに追加します。

    <item name="android:actionModeCutDrawable">@drawable/ic_menu_cut_holo_light</item>
    <item name="android:actionModeCopyDrawable">@drawable/ic_menu_copy_holo_light</item>
    <item name="android:actionModePasteDrawable">@drawable/ic_menu_paste_holo_light</item>
    <item name="android:actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_light</item>

次に、必要なドローアブル リソースをプロジェクトに追加します。これはhttps://github.com/android/platform_frameworks_base/tree/master/core/res/resにあります。

于 2015-08-10T18:30:55.627 に答える
2

問題:

アプリのテーマはandroid:Theme.Lightから継承されており、AlertDialog 専用のテーマがないため、ActionMode の項目は何らかの形で非表示になっています。


解決:

1. AlertDialog 専用のテーマを作成します。

<style name="AppTheme" parent="android:Theme.Light">
</style>
<style name="AlertDialogTheme" parent="AppTheme">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowCloseOnTouchOutside">true</item>
    <item name="android:windowActionModeOverlay">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
    <item name="android:maxLines">1</item>
    <item name="android:scrollHorizontally">true</item>
    <item name="android:textColor">@android:color/holo_blue_light</item>
</style>

注:魔法を作る最も重要な行は<item name="android:textColor">@android:color/holo_blue_light</item>

2. AlertDialog の構築時に専用テーマを使用します。

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogTheme);

テーマ適用前後のスクリーンショットをご覧ください。

スクリーンショット

于 2014-11-29T09:14:26.053 に答える
0

上記の解決策を試してみましたが、唯一うまくいったのは (AppCompat 21.0.3 を使用して API 7 を対象としたアプリを持っている)、ダイアログ スタイルを R.style.Theme_AppCompat に設定することです。はい、愚かなダイアログは黒くなりました。この問題は、AppCompat 22 にも存在します。

    final Context themedContext = new ContextThemeWrapper(activity, R.style.Theme_AppCompat);
    builder = new AlertDialog.Builder(themedContext);
    contents = ((LayoutInflater) themedContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.tag_editor, null);
    builder.setView(contents);
于 2015-03-11T12:03:01.667 に答える
-1

解決策は、ActionBar のコンテキストを使用して AlertDialog を作成することです。

Context themedContext = getActivity().getActionBar().getThemedContext();

または ActionBarSherlock/ActionBarCompat を使用:

Context themedContext = getActivity().getSupportActionBar().getThemedContext();

次に、このテーマ コンテキストを使用して AlertDialog を作成します。

AlertDialog.Builder builder = new AlertDialog.Builder(themedContext);
于 2013-12-16T21:40:18.733 に答える