web-dev-qa-db-ja.com

Android:AppCompat 21、戻るアイコンとオーバーフローアイコンをカスタムアイコンに変更するにはどうすればよいですか?

数日前までの私のプロジェクトでは、シャーロックアクションバーを使用していましたが、アクションバーのスタイル全体を新しいマテリアルデザインに変更することにしました。バックアイコンとオーバーフローアイコンの古いテーマでは、テーマにいくつかのカスタムアイコンを設定していました。しかし、appcompatで、ツールバーで使用するテーマで定義しようとしましたが、機能しません。誰もがこれを可能にする方法を知っていますか?

ツールバーで使用する私のテーマ(アセットスタジオで生成):

<style name="Theme.Themewiz" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="Android:actionBarStyle">@style/ActionBar.Solid.Themewiz</item>

    <item name="Android:actionBarItemBackground">@drawable/selectable_background_themewiz</item>
    <item name="Android:popupMenuStyle">@style/PopupMenu.Themewiz</item>
    <item name="Android:dropDownListViewStyle">@style/DropDownListView.Themewiz</item>
    <item name="Android:actionBarTabStyle">@style/ActionBarTabStyle.Themewiz</item>
    <item name="Android:actionDropDownStyle">@style/DropDownNav.Themewiz</item>
    <item name="Android:actionModeBackground">@drawable/cab_background_top_themewiz</item>
    <item name="Android:actionModeSplitBackground">@drawable/cab_background_bottom_themewiz</item>
    <item name="Android:actionModeCloseButtonStyle">@style/ActionButton.CloseMode.Themewiz</item>

            <!-- Light.DarkActionBar specific -->
    <item name="Android:actionBarWidgetTheme">@style/Theme.Themewiz.Widget</item>

    <item name="Android:actionOverflowButtonStyle">@style/Theme.AppCompat.Overflow</item>

</style>

<style parent="@style/Widget.AppCompat.ActionButton.Overflow" name="Theme.AppCompat.Overflow">

    <item name="Android:src">@drawable/ic_action_overflow</item>

</style>

ツールバーxml:

<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/my_awesome_toolbar"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:minHeight="?attr/actionBarSize"
    Android:background="?attr/colorPrimaryDark"
    app:theme="@style/Theme.Themewiz"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
10
billiout

Appcompat21を使用してこれらを達成するのは非常に簡単です。

戻るアイコンを変更するには、代わりにサポートツールバーをアクションバーとして使用する必要があります。 Chris Banesによるこの投稿 開始する必要があります。

ツールバーの追加が完了したら、次のことを行う必要があります。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_id);
toolbar.setNavigationIcon(R.drawable.back_icon);

一方、オーバーフローアイコンを変更するには、メインテーマ宣言にカスタムスタイルを追加するのが最も簡単な方法です。何かのようなもの:

<resources>
    <!-- Base application theme. -->
    <style name="Your.Theme" parent="@style/Theme.AppCompat">
        <!-- Your theme items go here -->

        <item name="actionOverflowButtonStyle">@style/OverFlow</item>
    </style>

    <!-- Styles -->
    <style name="OverFlow" parent="@Android:style/Widget.AppCompat.ActionButton.Overflow">
        <item name="Android:src">@drawable/overflow_icon</item>
    </style>

</resources>

お役に立てば幸いです。

16
Kingsley Adio

私はこのようにしました、そしてそれは私のために働きます

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    <item name="actionOverflowButtonStyle">@style/OverFlow</item>
</style>

<style name="OverFlow" parent="Widget.AppCompat.ActionButton.Overflow">
    <item name="Android:src">@drawable/custom_button</item>
</style>
4
n1m1

ビュー自体を取得するのは少し注意が必要ですが、ツールバーの機能を使用してアイコンや色を設定することができます。例:

toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
final Drawable navigationIcon = toolbar.getNavigationIcon();
toolbar.setNavigationIcon(getTintedDrawable(this, navigationIcon, 0xffff0000));
final Drawable overflowIcon = toolbar.getOverflowIcon();
toolbar.setOverflowIcon(getTintedDrawable(this, overflowIcon, 0xffff0000));

public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) {
    Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable);
    DrawableCompat.setTint(wrapDrawable, color);
    DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN);
    return wrapDrawable;
}
4
<style name="AppTheme">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="homeAsUpIndicator">@drawable/back_white1</item>
</style>
2
Asad