android - appcompat-v7更新取消Toolbar文字颜色自定义

标签 android android-toolbar android-appcompat

support:appcompat-v7:22.1.1 更新为 insupportablement-v7:23.1.0 导致取消 的标题和菜单文本颜色自定义支持.v7.widget.Toolbar

为什么会发生这种情况以及如何解决?

这是更新前后显示的工具栏。

Before the update

After the update

约束:

  • 使用最新版本的appcompat(目前为23.1.0)

  • 更改工具栏主题但不是整个应用主题

  • minSdkVersion 14

  • MainActivity extends FragmentActivity(我不想扩展ActionBarActivity)

更新appcompat的版本似乎取消了textColorPrimarytextColorSecondary的效果(见下面的styles.xml)。

唯一的代码差异出现在 appcompat-v7 中,当然还有 compileSdkVersiontargetSdkVersion(参见两个文件 build. gradle (Module: app) 下面)

以下是测试这两种情况所需的所有代码文件:

MainActivity.java

package com.example.myapplication;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v7.widget.Toolbar;

public class MainActivity extends FragmentActivity {
    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        toolbar.setTitle(R.string.app_name);
        toolbar.inflateMenu(R.menu.menu_main)
    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        app:theme="@style/ToolbarTheme" />

</RelativeLayout>

styles.xml

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Dark">
        <item name="android:textColorPrimary">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
    </style>

</resources>

menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:title="Refresh"
        app:showAsAction="collapseActionView" />
</menu>

colors.xml

<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

build.gradle(模块:应用程序)这个旧版本可以工作!

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:22.1.1'
}

build.gradle(模块:app)这个新版本不工作!!

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
}

最佳答案

我是这样解决的:

我尝试的第一件事是在 onCreate toolbar.setTitleTextColor(....); 中设置它,它有效但不是一个好的解决方案。

所以我开始使用样式并找到适合我的解决方案:

styles.xml中添加样式

<style name="AppTheme.Toolbar.Title" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
    <item name="android:textColor">@android:color/white</item>
</style>

然后在工具栏中添加属性app:titleTextAppearance="@style/AppTheme.Toolbar.Title"

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
                                   xmlns:app="http://schemas.android.com/apk/res-auto"
                                   android:id="@+id/tool_bar"
                                   android:layout_width="match_parent"
                                   android:layout_height="wrap_content"
                                   android:background="@color/colorPrimary"
                                   android:minHeight="?attr/actionBarSize"
                                   app:theme="@style/ToolbarTheme"
                                   app:titleTextAppearance="@style/AppTheme.Toolbar.Title" />

编辑:

使用 android:theme,如果你需要设置菜单样式,使用 app:popupTheme

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
                                   xmlns:app="http://schemas.android.com/apk/res-auto"
                                   android:id="@+id/tool_bar"
                                   android:layout_width="match_parent"
                                   android:layout_height="wrap_content"
                                   android:background="@color/colorPrimary"
                                   android:minHeight="?attr/actionBarSize"
                                   android:theme="@style/ToolbarTheme"
                                   app:popupTheme="@style/MyMenuStyle"
                                    />

关于android - appcompat-v7更新取消Toolbar文字颜色自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31625755/

相关文章:

java - Android findViewById 工具栏返回 null

机器人: fragment 的 Recyclerview?

android - 获取 DynamoDB 表中所有项目的值并显示 (Android)

android - 在 Google Maps Android 上绘制路线

android - SetSpan 在 ScrollingActivity Title 中不起作用

android - 工具栏无点击事件

android - ActionBarDrawerToggle v7 箭头颜色

android - 内部 PreferenceScreen 不使用 PreferenceFragmentCompat 打开

android - TextureView getBitmap() 忽略 setTransform

java - 在视频中看到了这一点,该视频被称为匿名内部类的替代品,这是什么?