AppCompatツールバーを使用すると、ActionModeの変更時にオーバーフローメニューアイコンの色を変更できます。
たとえば、通常のツールバーモードでは、オーバーフローアイコンは白になります。そして、ActionModeで黒に変わります。これまでのところ、タイトルモードだけでなくアクションモードの背景も変更できました。しかし、オーバーフローメニューアイコンの色を変更する方法をまだ見つけていません。
利用可能な答えがあることを知っています: Change ActionMode Overflow icon
最初の解決策を試しましたが、オーバーフローアイコンが見つかりませんでした。
2番目のソリューションでは、50Lの遅延があっても、オーバーフローメニューアイコンがActionModeの意図した色を点滅させ、非常に耳障りな短い一瞬になります。
テーマ属性に次の行を追加します。
<item name="Android:textColorSecondary">@Android:color/white</item>
これは、Android:textColorSecondary
テーマ属性を設定することで実現できます。
たとえば、テーマMyToolbarStyle
を使用する次のツールバーがあるとします。
<Android.support.v7.widget.Toolbar
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/main_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
theme="@style/MyToolbarStyle"
/>
次に、ThemeOverlay.AppCompat.ActionBar
から継承するMyToolbarStyle
スタイルを定義します。最後に、Android:textColorSecondary
の項目を追加して、オーバーフローアイコンの色を変更します。
<style name="MyToolbarStyle" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="Android:textColorSecondary">#333333</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="Android:actionOverflowButtonStyle">@style/ActionButton.Overflow.Icon</item>
</style>
<style name="ActionButton.Overflow.Icon" parent="Android:style/Widget.Holo.Light.ActionButton.Overflow">
<item name="Android:src">@mipmap/yourwanticon</item>
</style>
Res-> styles.xmlにこのコードを追加します
<style name="ToolbarColored" parent="AppTheme">
<item name="Android:textColorSecondary">YOUR_COLOR</item>
</style>
次に、beloveのようなXCMLファイルの「ToolbarColored」スタイル
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
app:theme="@style/ToolbarColored"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="Android:actionOverflowButtonStyle">@style/ActionButtonOverflow</item>
<!-- Support library compatibility -->
<item name="actionOverflowButtonStyle">@style/ActionButtonOverflow</item>
</style>
<style name="ActionButtonOverflow" parent="@style/Widget.AppCompat.ActionButton.Overflow">
<item name="Android:tint">@color/brand_white</item>
</style>
ツールバーのオーバーフローメニューアイコンの色を正しく変更するには、ツールバーのテーマをAppCompatの暗いActionBarテーマに設定します。例えば:
Res/values/style.xmlファイルで、この方法でAppCompatを継承するテーマを作成します。
<style name="AppTheme.MyThemeName" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
次に、ツールバーのテーマをこのテーマに設定します。
<Android.support.v7.widget.Toolbar
Android:id="+id/my_toolbar_id
Android:layout_width="match_parent"
Android:layout_height="@dimen/my_toolbar_height"
Android:theme="@style/AppTheme.MyThemeName">
</Android.support.v7.widget.Toolbar>
アクティビティXMLでツールバーを使用している場合は、次のようなものを使用できます
toolbar?.navigationIcon?.setColorFilter(ContextCompat.getColor(this, Android.R.color.black), PorterDuff.Mode.SRC_ATOP)
最初にカスタムスタイルを作成します
<style name="ToolbarColoredBackArrow" parent="AppTheme">
<item name="Android:textColorSecondary">@color/white</item>
</style>
次に、ツールバーに追加します
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:titleTextColor="@color/white"
app:theme="@style/ToolbarColoredBackArrow"
Android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
Android:background="?attr/colorPrimary" />
<style name="ToolBarTheme" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="Android:tint">@color/colorAccent</item>
上記のtheme.set色合いを自分の色で作成し、このテーマをツールバーに追加します。
<androidx.appcompat.widget.Toolbar
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
Android:theme="@style/ToolBarTheme"/>
whiteオーバーフローメニューアイコンが必要な場合は、単にAndroid:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
ツールバーレイアウトコード。
darkオーバーフローメニューアイコンが必要な場合は、Android:theme="@style/Base.Widget.AppCompat.Light.PopupMenu"
したがって、最終的なコードは次のようになります。
<Android.support.v7.widget.Toolbar
Android:id="@+id/a_main_tb"
Android:layout_width="match_parent"
Android:layout_height="?actionBarSize"
Android:background="@color/colorPrimary"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="@string/app_name"
app:titleTextColor="#ffffff"
/>
また、メニュー項目の色も変更することを理解する必要があります。