主题更改时如何更改浮动操作按钮的颜色?

3

我希望能够为我的应用程序应用不同的主题。我想改变导航栏和浮动操作按钮的颜色。

现在我可以改变导航栏的颜色,但是浮动操作按钮的颜色没有改变。当主题改变时,我如何动态地改变fab的颜色?

样式:

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="colorAccent_500">@color/accent_500</item>
        <item name="colorAccent_700">@color/accent_700</item>

        <item name="windowActionBarOverlay">false</item>

        <item name="windowActionBar">false</item>

        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@color/background_material_light</item>
    </style>
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />


    <style name="BlueTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">#3F51B5</item>
        <item name="colorPrimaryDark">#303F9F</item>
        <item name="colorAccent">#03A9F4</item>

        <item name="windowActionBarOverlay">false</item>

        <item name="windowActionBar">false</item>

        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@color/background_material_light</item>
    </style>


    <style name="AppTheme.Solarized">
        <item name="colorPrimary">@color/orange300</item>
        <item name="colorPrimaryDark">@color/orange500</item>
        <item name="colorAccent">@color/solarizedOrange</item>
        <item name="android:textColorPrimary">@color/solarizedBase01</item>
        <item name="android:textColorSecondary">@color/solarizedBase1</item>
    </style>


</resources>

Fab :

    <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_fab"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_gravity="bottom|end">

    <View
        android:id="@+id/myfab_shadow"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:layout_gravity="center"
        android:background="@drawable/fab_shadow"
        android:focusable="false" />

    <ImageButton
        android:id="@+id/imgbtn_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/fab_selector"
        android:cropToPadding="true"
        android:padding="10dp"
        android:src="@drawable/ic_add_white_36dp"
        android:stateListAnimator="@animator/fab_elevation_selector" />

</FrameLayout>

组件选择器:

  <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <shape android:shape="oval">
            <solid android:color="@color/colorAccent" />
        </shape>
    </item>

    <item android:state_focused="true">
        <shape android:shape="oval">
            <solid android:color="@color/accent_700" />
        </shape>
    </item>

    <item>
        <shape android:shape="oval">
            <solid android:color="@color/accent_500" />
        </shape>
    </item>

</selector>

谢谢你。

从color.xml文件中更改强调颜色的颜色值。 - Chirag Savsani
3个回答

2
浮动操作按钮的颜色基于您的colorAccent
<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
    <item name="colorAccent">@color/accent</item>
</style>

或者从代码实现中:
fab.setBackgroundTintList(getResources().getColorStateList(R.color.blue));

或者从XML中获取:

更改 app:backgroundTint 属性

但是看起来你正在使用 ImageButton 而不是 FloatingActionButton,你应该使用:

 <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin" />

在依赖项中添加:

dependencies {
    compile 'com.android.support:design:23.1.1'
}

fab 的颜色是在 fab 选择器中设置的。我该如何在那里更改颜色? - Sid
为了使它正常工作,他需要使用 <android.support.design.widget.FloatingActionButton/> 替换自定义的 fab 布局。示例:https://github.com/android/platform_development/blob/master/samples/SupportDesignDemos/res/layout/design_fab.xml - TouchBoarder
看起来你正在使用ImageButton而不是FloatingActionButton,请查看编辑后的答案。 - Asim Roy

0

感谢您的回答。但我只是在fab选择器中进行了更改。

<item android:state_pressed="true">
    <shape android:shape="oval">
        <solid android:color="?attr/colorAccent" />
    </shape>
</item>

<item android:state_focused="true">
    <shape android:shape="oval">
        <solid android:color="?attr/colorAccent" />

    </shape>
</item>

<item>
    <shape android:shape="oval">
        <solid android:color="?attr/colorAccent" />
    </shape>
</item>

这个可行。


-1
请使用带有浮动按钮的材料形状主题,现在非常容易,无需自定义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接