web-dev-qa-db-ja.com

AndroidでActionModeの背景色を変更する方法

Androidアプリのサポートレベルapiが7であるアプリを作成しているため、sherlockアクションバーを使用しています。アクションモードを使用しています。問題は、アクションモードの背景を変更することです。したがって、私が試してみました

    <item name="Android:background">@color/something</item>
    <item name="Android:backgroundStacked">@color/something</item>
    <item name="Android:backgroundSplit">@color/something</item>

これらのスタイルのソリューションは利用可能ですが、どれも機能しません。 enter image description here

16
Love Garg

actionBarの色を変更したい場合は、次のようにします。

 ActionBar bar = getActionBar();
 bar.setBackgroundDrawable(new ColorDrawable("COLOR"));

詳細については、次の link を参照してください

actionModeを使用している場合これは、任意のActionModeに使用されるスタイルです。カスタマイズするには、独自のスタイルを作成する必要があります

<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>

詳細 このサイト

this も参照

編集

pre-Honeycombについては this を参照してください

多分 this または this はあなたを助けました

16

私の場合、私はこれで解決しました。最初に、actionModeBackgroundを定義するスタイルを作成しました。

<style name="MyTheme.ActionMode" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionModeBackground">#FFFFFF</item>
</style>

次に、スタイルをベースアプリケーションのテーマに追加します。

<style name="AppTheme" parent="AppBaseTheme">
    <item name="Android:actionModeStyle">@style/MyTheme.ActionMode</item>
</style>

それが役に立てば幸い!!!

31
Kokusho

単純な Action Bar を使用している場合は、これを試してください。

_ActionBar abar = getActionBar();
abar.setBackgroundDrawable(new ColorDrawable(0xff123456));
_

しかし、 Actionbar share lock Lib を使用している場合は、これを試してください

_getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff123456));
_

ColorDrawable(0xff123456)-カラーコードである必要があります。

Drawable/styles.xml

_ <item name="Android:actionModeBackground">@drawable/actionbar_background</item>
 <item name="actionModeBackground">@drawable/actionbar_background</item>
_

APIレベルごとにテーマを変更します

APIレベルに従って変更したい場合は、 this

16
Chintan Khetiya

プログラムで実行する場合(AppCompatをサポート)、アイコンの親ビューを探す必要があります。このコードは2.3.7から6.0.1でテストされています。より低いAPIを確認する必要があります..。

最初にアクティビティの装飾ビューを取得

final ViewGroup  decorView = (ViewGroup) getActivity().getWindow().getDecorView();

2番目はonPrepareActionModeで色を設定します。ここで戻るアイコンやその他の要素を設定することもできます

@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) 
{

     decorView.postDelayed(new Runnable() {

     @Override
     public void run() 
     {
        int buttonId = getResources().getIdentifier("action_mode_close_button", "id", "Android");

        View v = decorView.findViewById(buttonId);
        if (v == null)
        {
           buttonId = R.id.action_mode_close_button;
            v = decorView.findViewById(buttonId);   
        }

        if (v != null)
        {                         
           ((View)v.getParent()).setBackgroundColor(Color.red /*your color here*/);
        }               
     }   
     }, 500);}
3
Colateral

カスタムテーマでこのスタイルをオーバーライドします。

<style name="Base.Widget.AppCompat.ActionMode" parent="">
    <item name="background">?attr/actionModeBackground</item>
    <item name="backgroundSplit">?attr/actionModeSplitBackground</item>
    <item name="height">?attr/actionBarSize</item>
    <item name="titleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Title</item>
    <item name="subtitleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle</item>
    <item name="closeItemLayout">@layout/abc_action_mode_close_item_material</item>
</style>

例えば:

<style name="LywActionMode" parent="Base.Widget.AppCompat.ActionMode">
    <item name="background">@color/lyw_primary_color</item>
    <item name="backgroundSplit">@color/lyw_primary_color</item>
</style>

<style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light">
    ...
    <item name="actionModeStyle">@style/LywActionMode</item>
</style>

それを行う最も簡単な方法

ActionBarContextView actionBar = getWindow().getDecorView().findViewById(R.id.action_mode_bar);
    actionBar.setBackgroundColor(WhateverColorYouWant);
1
Eugene Sianko

これは、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>
1
M D

まだ苦労していて、既存の解決策のいずれも役に立たない場合は、ツールバー付きのレイアウトに次のことを確認してください:

app:popupTheme="@style/Theme.ToolBar"
Android:popupTheme="@style/Theme.ToolBar"

そしてあなたは持っていません

app:theme="@style/Theme.ToolBar"

競合が発生し、カスタマイズが機能しないためです。

1
Roger Alien

この答えをもっと明確にしたい。まず、ドローアブルフォルダーにカスタムバックグラウンド「storage_list_header_shape.xml」を作成します。

<?xml version="1.0" encoding="utf-8"?>
  <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
     Android:shape="rectangle" >

   <gradient
      Android:angle="270"
      Android:startColor="@Android:color/holo_orange_light"
      Android:centerColor="@Android:color/holo_orange_dark"
      Android:endColor="@Android:color/holo_orange_light" />

   <size Android:height="3dp" />

 </shape>

次に、style.xmlでカスタムスタイルを作成します

<style name="customActionModeTheme" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionModeBackground">@drawable/storage_list_header_shape</item>
</style>

3番目に、マニフェストでスタイルを呼び出します。

<activity
     Android:name="com.javacafe.activities.Main"
     Android:launchMode="singleTop"
     Android:screenOrientation="sensorLandscape"
     Android:theme="@style/customActionModeTheme" >
</activity>
0
nAkhmedov