web-dev-qa-db-ja.com

サポートライブラリ23.2.0にアップデートした後、ロリポップ前のデバイスで戻る矢印とオーバーフローアイコンの色が正しくない

Lollipop以前のデバイスでは、サポートライブラリ23.2.0にアップグレードした後、オーバーフローメニューアイコンとアクションバーの戻るボタンが黒色に変わりました。アップグレード前は白(正しい色)です。

正しい色は: enter image description here

オーバーフローメニューアイコンで示されているように、アップグレード後に誤った色が表示されます。

enter image description here

Sytle.xmlのテーマ(pre-v21/Lollipop):

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <!--Used on the application level by the manifest.-->
    <style name="app_theme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/app_primary_colour</item>
        <item name="colorPrimaryDark">@color/app_primary_dark_colour</item>
        <item name="colorAccent">@color/app_accent_colour</item>
        <item name="Android:windowBackground">@color/app_background</item>
        <item name="searchViewStyle">@style/custom_search_view_style</item>
    </style>

    <!--Used by activities.-->
    <style name="app_theme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <!--TODO: What are these?-->
    <style name="app_theme.app_bar_overlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
    <style name="app_theme.popup_overlay" parent="ThemeOverlay.AppCompat.Light" /> ... ... </resources>

herehere を確認しましたが、問題は解決しませんでした。

UPDATE:次のGoogleバグレポートもご覧ください: https://code.google.com/p/Android/issues/detail?id = 201918

28
henry000dev

直せる。

AppCompatテーマがオーバーフローボタンに次のリソースを使用していることがわかりました:abc_ic_menu_overflow_material.xml

このリソースの内容は次のとおりです。

<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:width="24dp"
        Android:height="24dp"
        Android:viewportWidth="24.0"
        Android:viewportHeight="24.0"
        Android:tint="?attr/colorControlNormal">
    ...
</vector>

次に、ドットを接続しました:

  • 最初:それはcolorControlNormalを使用しています
  • 第二:それはベクトルを使用しています

修正方法

ライブラリV23.2.0リリースノート( リンクはこちら )によると、ベクターにサポートを追加するには、build.gradleを更新する必要があります。

build.gradle

ビルドグラドルに次の行を追加します

Gradle 2.0(私はテストしませんでした):

Android {  
    defaultConfig {  
        vectorDrawables.useSupportLibrary = true  
    }  
}  

Gradle 1.5(私はこれを使用しています..動作します):

Android {  
    defaultConfig {  
        generatedDensities = []  
    }  

    aaptOptions {  
        additionalParameters "--no-version-vectors"  
    }  
}  

テーマを修正する

このステップは無視できます。一部の基本テーマは、colorControlNormalをすでに白に設定しています(AppCompat.Dark.ActionBarなど)。

ただし、私の場合、すべてのボタンの色が黒のままで、colorControlNormalをテーマに追加して、白で上書きする必要がありました。

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorControlNormal">@color/white</item>
</styel>

これがお役に立てば幸いです。

これは私が私の問題を修正した方法でした。

35
W0rmH0le

問題を修正するサポートライブラリ23.2.1にアップデートするだけです。

AppCompatユーザーの場合、23.2ブログの投稿で説明されているサポートベクタードローアブルを有効にするためのフラグ( http://goo.gl/073Mpo )は、AppCompatの使用に必要なくなりました。

https://plus.google.com/+AndroidDevelopers/posts/BZgzpAqkd8G

7
Jorge Pastor

サポートライブラリを23.2.0に変更すると、この問題が発生しました。戻る矢印とオーバーフローアイコンが黒くなりました。

protected void changeBackArrow() {
    final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_material);
    upArrow.setColorFilter(ContextCompat.getColor(this, R.color.textColorPrimary), PorterDuff.Mode.SRC_ATOP);

    getSupportActionBar().setHomeAsUpIndicator(upArrow);
}

サポートの時点で、23.1ツールバーにgetOverflowIcon()およびsetOverflowIcon()メソッドが追加されました

protected void changeOverflowMenu() {
    final Drawable overflowIcon = getToolbar().getOverflowIcon();
    overflowIcon.setColorFilter(ContextCompat.getColor(this, R.color.colorWhite), PorterDuff.Mode.SRC_ATOP);

    getToolbar().setOverflowIcon(overflowIcon);
}
4

受け入れられた回答が正しくなかったため、この回答を書いています(正しいのですが)。しかし、私はそれを別の方法で解決したので、ここでそれを共有しています:

まず、gradleファイルには何も追加しませんでした。サポートライブラリv23.4.0を使用しています。これは、この記事の執筆時点で最新のものであるためです。

私にとってうまくいったのはカラーリソース参照を使用する代わりに、ティントカラーまたはパスカラーをハードコーディングするです。たとえば、Android:fillColor="#fff"の代わりにAndroid:fillColor="@Android:color/white"を使用します。

<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:width="24dp"
    Android:height="24dp"
    Android:tint="#fff"
    Android:viewportHeight="24"
    Android:viewportWidth="24">
    <path
        Android:fillColor="#fff"
        Android:pathData="M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z" />
</vector>

上記のコードスニペットの色合いとパスの色を確認します。以前は色を"@color/someColor"として割り当てていましたが、v21以降でのみ機能することを警告し、v21以下では実際には機能しませんでした。そこで、それをハードコードされた値に変更しました。繰り返しますが、これは単純な回避策/ハックであり、おそらく正しい解決策ではありません。

3
Ankit Aggarwal

アクティビティのonCreate()の開始時に呼び出すことができるヘルパー関数(私は便利な関数を持つ静的ヘルパークラスを使用)を作成しました。

    public static void setWhiteBackArrow(ActionBar actionbar, Context context){
    //needed due to bug in Android compile version 23
    // https://code.google.com/p/Android/issues/detail?id=201918
    if (actionbar != null) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Lollipop) {
            final Drawable upArrow = ContextCompat.getDrawable(context, Android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
            upArrow.setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP);
            //ActionBar aBar = context.getSupportActionBar();
            actionbar.setHomeAsUpIndicator(upArrow);
        }
    }    

アクティビティのonCreate()で次のように呼び出します。

Helper.setWhiteBackArrow(getSupportActionBar(), this);
0
JanScott