web-dev-qa-db-ja.com

コンテキストアクションバースタイル

コンテキストアクションバー(CAB)でスタイル情報を探しています。実際、テキストの色を変更する必要があります。

Result of contextual actionbar

上記からわかるように、これは標準のTheme.Holo.Light.DarkActionBarテーマを使用しているので、テキストの色を白に設定する必要があります。

誰かが私を正しい方向に向けることができますか?

23
Eurig Jones

私は自分の質問にコメントを投稿しましたが、これは実際には私が使用していたバージョンのAndroid(おそらく4.0の初期バージョン)のバグです)

これは説明されているバグです: http://code.google.com/p/Android/issues/detail?id=26008

4
Eurig Jones

コンテキストアクションバーのテキストの色などを変更するには:

public boolean onCreateActionMode(ActionMode mode, Menu menu) {
  //mode.setTitle("Contextual Action Bar"); (replace this call)
  TextView tv= (TextView)getLayoutInflater().inflate(R.layout.contextual_title, null);
  tv.setText("Contextual Action Bar");
  mode.setCustomView(tv);

ここで、layout/contextual_title.xmlには、希望の色/サイズ/スタイルなどの単一のTextViewが含まれています

実際、コンテキストアクションバーのほとんどすべてをスタイル設定できます。唯一の問題は、「コンテキスト」という単語を検索しても役に立たないことです。関連するスタイリング機能はすべて「actionMode ...」と呼ばれます。これが私が使用したものです(私のテーマで定義されています)。

<item name="Android:actionModeCloseDrawable">@drawable/check</item>
<item name="Android:actionModeCutDrawable">@drawable/ic_menu_cut_holo_dark</item>
<item name="Android:actionModeCopyDrawable">@drawable/ic_menu_copy_holo_dark</item>
<item name="Android:actionModePasteDrawable">@drawable/ic_menu_paste_holo_dark</item>
<item name="Android:actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_dark</item>
<item name="Android:actionModeBackground">@drawable/contextual</item>
<item name="Android:actionModeCloseButtonStyle">@style/MyCloseButton</item>

<!-- these change the press backgrounds for the Vanilla actionBar and for search -->
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:selectableItemBackground">@drawable/bar_selector</item>
<item name="Android:actionBarItemBackground">@drawable/bar_selector</item>      

<!-- these were defined in platform/.../data/res/values/... but Eclipse didn't recognize them -->
<!--? item name="Android:actionModeShareDrawable">@drawable/icon</item -->
<!--? item name="Android:actionModeFindDrawable">@drawable/icon</item -->
<!--? item name="Android:actionModeWebSearchDrawable">@drawable/icon</item -->
<!-- item name="Android:actionModeBackground">@drawable/red</item -->

<!-- and finally -->
<style name="MyCloseButton" parent="Android:style/Widget.ActionButton.CloseMode">
    <item name="Android:background">@drawable/bar_selector</item>
</style>

独自のテキスト編集カット/貼り付け/コピー/選択アイコン、バーの背景、およびアイコンを押すと色が変わるアイコンの背景(上記のbar_selector)を簡単に設定できます。アイコンはボタンではなくImageViewであり、編集ID(およびプレス可能な背景)は、「内部」タイプであるImageViewの親(ビューごとに1つの親)にアタッチされます。

スタイルのどこに何が入るのかは決して明確ではありません。selectableItemBackgroundがプラットフォームThemes.xmlのどこにあるかを見つけ、ポイントされたドローアブルをコピーして変更しました。

51
hexatron

コンテキストアクションモードを手動で開始する場合は、起動する前に新しいテーマでsetTheme()を呼び出すことができます(黒地に黒のテキストの問題を回避しようとしている場合は、Theme.AppCompat.Light.DarkActionBarなど)。アクティビティのコンテンツビューをすでに設定している場合、これは現在のアクティビティのテーマには影響しません。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.my_activity_layout);

    // these lines can occur anywhere so long as you've already 
    // called "setContentView()" on the activity. The theme
    // you set here will apply to the action mode, but not to 
    // the activity.
    setTheme(R.style.Theme_AppCompat_Light_DarkActionBar);
    startSupportActionMode(myActionModeCallback);

}
0
mikejonesguy

現在は機能していますが、values/styles.xml(values-v#/ styles.xmlではなく)に入力して、一般的な(API固有ではないタグ)に入力する必要があります。

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="Android:actionModeCloseDrawable">@drawable/ic_launcher</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
0
user1876617