使用styles.xml中的AppCompat设置android.support.v7.widget.Toolbar的样式

时间:2015-12-03 08:18:20

标签: android material-design android-support-library android-appcompat

我在使用styles.xml文件中的CoordinatorLayout / AppBarLayout内的工具栏以及使用23.1.1支持库中的AppCompat时,遇到了问题。

我想要解决的问题:我的活动来自不同的应用项目,所有这些项目都使用Theme.AppCompat.Light.NoActionBar。有些应用程序具有浅色原色,一切都很好。但是,有些颜色较深,需要在活动的布局文件中的工具栏上设置android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" - 这是我无法做到的,因为其他应用也会使用相同的代码和资源文件。

编辑:我想我现在已经解决了这个问题。保持styles.xml不变,在活动中我现在继承了actionBarTheme,如下所示(从阅读http://developer.android.com/reference/android/R.styleable.html#Theme_toolbarStyle获得了想法):

<android.support.v7.widget.Toolbar
    android:id="@+id/webview_toolbar"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="?attr/actionBarTheme"/>

请参阅以下相关问题和博文:

在阅读了上述所有内容之后,我尝试通过在具有深色原色的应用程序中导出来自Theme.AppCompat.Light.DarkActionBar(而不是* .NoActionBar)的应用主题来解决我的问题,并应用所有允许操作的样式酒吧走了出于绝望,我甚至试图设置actionBarTheme和actionBarStyle。

我的应用有一个styles.xml文件,如下所示:

<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/myDarkRed</item>
    <item name="colorPrimary">@color/myRed</item>
    <item name="colorAccent">@color/myOrange</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
    <item name="actionBarStyle">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

我的活动(源自AppCompatActivity)的layout.xml如下所示:

<android.support.v7.widget.Toolbar
    android:id="@+id/webview_toolbar"
    android:fitsSystemWindows="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

不幸的是,我的Activity在工具栏上仍然有深色文本颜色。我做错了什么?

2 个答案:

答案 0 :(得分:0)

这对我有用

<style name="MyToolbarTheme">
        <!-- Used to tint the back arrow, menu and spinner arrow -->
        <item name="colorPrimary">#ffffff</item>
        <item name="colorPrimaryDark">#ffffff</item>
        <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
        <item name="colorControlNormal">#ff0000</item>
        <item name="android:textColor">#ffffff</item>
        <item name="android:textColorHighlight">#ffffff</item>
        <item name="actionOverflowMenuStyle">@style/CMOptionsMenu</item>
        <item name="searchViewStyle">@style/MySearchViewStyle</item>

    </style>

    <style name="CMOptionsMenu" parent="Widget.AppCompat.PopupMenu.Overflow">
        <item name="android:popupBackground">#ffffff</item>
    </style>

    <style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView">
        <item name="android:textColor">@android:color/black</item>
    </style>

答案 1 :(得分:0)

您可以在工具栏上设置自己的通用样式

class Application extends React.Component { //constructor(props) { // super(props); // this.state = { // notificationSystem: this.refs.notificationSystem // }; //} addNotification(event) { event.preventDefault(); this.notificationSystem.addNotification({ message: 'Notification message', level: 'success' }); } render() { var Handler = this.props.currentRoute.get('handler'); return ( <div> <Nav currentRoute={this.props.currentRoute} links={pages} /> <div className="main"> <Handler /> </div> <NotificationSystem ref="notificationSystem" /> </div> ); } componentDidMount() { this.state.notificationSystem = this.refs.notificationSystem; } componentDidUpdate(prevProps, prevState) { const newProps = this.props; if (newProps.pageTitle === prevProps.pageTitle) { return; } document.title = newProps.pageTitle; } }

然后在styles.xml中设置从Light或Dark ThemeOverlay ActionBar继承它。