web-dev-qa-db-ja.com

アクションモードの色とテキストをカスタマイズするにはどうすればよいですか?

デフォルトのアクションモード(3.0以上)には、緑色のテーマと左側に[完了]ボタンがあります。これらをどのようにカスタマイズできますか?

ありがとう

23

これは、すべてのActionModeに使用されるスタイルです。SDKからプルしました。カスタマイズするには、独自のスタイルを作成する必要があります。とても簡単です。これまでにこのようなことを一度も行ったことがない場合は、ActionBarのカスタマイズについて この投稿 を一読する必要があります。それはあなたが知る必要があるすべてのものを説明します。

    <style name="Widget.ActionMode">
    <item name="Android:background">?android:attr/actionModeBackground</item>
    <item name="Android:backgroundSplit">?android:attr/actionModeSplitBackground</item>
    <item name="Android:height">?android:attr/actionBarSize</item>
    <item name="Android:titleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Title</item>
    <item name="Android:subtitleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
    </style>
33
adneal

私のアプリケーションのためのソリューション

<style name="AppTheme" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionModeBackground">@color/bg_action_bar</item>
</style>
25
PleaseTwo

このコードを使用すると、アクションモードの背景色を変更したり、DONE画像を変更したりできます。注:画像にテキストを追加することもできます! res/styles.xml:

<style name="AppTheme" parent="Android:Theme.Holo">
<item name="Android:actionModeBackground">@Android:color/white</item>
<item name="Android:actionModeCloseDrawable">@drawable/plus</item>
11
Mina Dahesh

私のプロジェクトに取り組んだ

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="actionModeStyle">@style/CustomActionModeStyle</item>
 </style>

カスタムActionModeスタイル

<style name="CustomActionModeStyle" parent="Base.Widget.AppCompat.ActionMode">
        <item name="background">@color/color_primary</item>
        <item name="titleTextStyle">@style/CustomeActionModeTextStyle</item>
</style>

カスタムタイトルActionMode

<style name="CustomeActionModeTextStyle" parent="TextAppearance.AppCompat.Widget.ActionMode.Title">
    <item name="Android:textSize">16sp</item>
    <item name="Android:textColor">@color/color_primaryText</item>
</style>
9
Jacky Pham

ここにJavaコードを使用した私のアプローチがあります:

private void customizeActionModeCloseButton(String title, int iconID) {
          int buttonId = Resources.getSystem().getIdentifier("action_mode_close_button", "id", "Android");    
          View v = findViewById(buttonId);
          if (v == null) {
             buttonId = R.id.abs__action_mode_close_button;
             v = findViewById(buttonId);
          }
          if (v == null)
             return;
          LinearLayout ll = (LinearLayout) v;
          if (ll.getChildCount() > 1 && ll.getChildAt(1) != null) {
             //custom icon
             ImageView img = (ImageView) ll.getChildAt(0);
             img.setImageResource(iconID);
             //custom text
             TextView tv = (TextView) ll.getChildAt(1);
             tv.setText(title);
             tv.setTextColor(Color.WHITE);
          }
       }
2

属性actionModeStyleがAPIレベル14で導入されているため、この方法で実際にカスタマイズすることはできません。APIレベル11〜13の場合は、運が悪いです。

APIレベル14の場合、テーマにAndroid:actionModeStyleを設定することでスタイルを変更できます。

2
Wu-Man

Lollipopの前後のデバイスの回答を更新しました。次のように、Lollipop +デバイスで機能させるには、Android:プレフィックスを削除する必要があります。

styles.xml:

<style name="Widget.ActionMode">
    <item name="Android:background">?android:attr/actionModeBackground</item>
    <item name="Android:backgroundSplit">?android:attr/actionModeSplitBackground</item>
    <item name="Android:height">?android:attr/actionBarSize</item>
    <item name="Android:titleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Title</item>
    <item name="Android:subtitleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
</style>

v21/styles.xml:

<style name="Widget.ActionMode">
    <item name="background">?android:attr/actionModeBackground</item>
    <item name="backgroundSplit">?android:attr/actionModeSplitBackground</item>
    <item name="height">?android:attr/actionBarSize</item>
    <item name="titleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Title</item>
    <item name="subtitleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
</style>

また、parent="@style/Widget.AppCompat.ActionMode"を設定してスタイルを設定することをお勧めします。これにより、オーバーライドする必要のない属性を継承できます。

1
Chantell Osejo

CAB完了ボタンの画像を一時的にカスタマイズ(カスタマイズ)するためのAppCompat(つまり、startSupportActionModeを使用)ソリューションを次に示します。一時的には、テキスト選択を開始したときに適切に見えるように、通常の画像を使用するように変更することが望ましいためです。

https://Gist.github.com/coreform/36ed98f98668f2e90c6a

0
straya