デフォルトのアクションモード(3.0以上)には、緑色のテーマと左側に[完了]ボタンがあります。これらをどのようにカスタマイズできますか?
ありがとう
これは、すべての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>
私のアプリケーションのためのソリューション
<style name="AppTheme" parent="@Android:style/Theme.Holo.Light">
<item name="Android:actionModeBackground">@color/bg_action_bar</item>
</style>
このコードを使用すると、アクションモードの背景色を変更したり、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>
私のプロジェクトに取り組んだ
<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>
ここに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);
}
}
属性actionModeStyleがAPIレベル14で導入されているため、この方法で実際にカスタマイズすることはできません。APIレベル11〜13の場合は、運が悪いです。
APIレベル14の場合、テーマにAndroid:actionModeStyleを設定することでスタイルを変更できます。
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"
を設定してスタイルを設定することをお勧めします。これにより、オーバーライドする必要のない属性を継承できます。
CAB完了ボタンの画像を一時的にカスタマイズ(カスタマイズ)するためのAppCompat(つまり、startSupportActionModeを使用)ソリューションを次に示します。一時的には、テキスト選択を開始したときに適切に見えるように、通常の画像を使用するように変更することが望ましいためです。