Android 将主题更改为按钮

Android 将主题更改为按钮,android,xml,drawable,android-theme,Android,Xml,Drawable,Android Theme,大家好,我有一个带有3个按钮的活动,我现在已经创建了更改主题应用程序的功能,在这里一切正常,但我不知道如何从buttshape.xml转到buttshape\u blue.xml 这是我的主题: <resources> <style name="AppTheme.Blue" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/primaryCol

大家好,我有一个带有3个按钮的活动,我现在已经创建了更改主题应用程序的功能,在这里一切正常,但我不知道如何从buttshape.xml转到buttshape\u blue.xml 这是我的主题:

<resources>

<style name="AppTheme.Blue" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/primaryColor_blue</item>
    <item name="colorPrimaryDark">@color/primaryColorDark_blue</item>
    <item name="colorAccent">@color/primaryAccent_blue</item>
    <item name="backgroundColor">@color/bianco</item>

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

</style>

<style name="AppTheme.Red" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/primaryColor_red</item>
    <item name="colorPrimaryDark">@color/primaryColorDark_red</item>
    <item name="colorAccent">@color/primaryAccent_red</item>
    <item name="backgroundColor">@color/bianco</item>


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


</style>
和基本活动

public class BaseActivity extends AppCompatActivity {

    private final static int THEME_BLUE = 1;
    private final static int THEME_RED = 2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        updateTheme();
    }
    public void updateTheme() {
        if (Utility.getTheme(getApplicationContext()) <= THEME_BLUE) {
            setTheme(R.style.AppTheme_Blue);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                getWindow().setStatusBarColor(getResources().getColor(R.color.primaryColorDark_blue));
            }
        } else if (Utility.getTheme(getApplicationContext()) == THEME_RED) {
            setTheme(R.style.AppTheme_Red);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                getWindow().setStatusBarColor(getResources().getColor(R.color.primaryColorDark_red));
            }
        }
    }
}
公共类BaseActivity扩展了AppCompativity{
私有最终静态int主题_蓝色=1;
私有最终静态int主题_RED=2;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
更新名称();
}
public void updatetime(){
if(Utility.getTheme(getApplicationContext())=Build.VERSION\u code.LOLLIPOP){
getWindow().addFlags(WindowManager.LayoutParams.FLAG\u DRAWS\u SYSTEM\u BAR\u BACKGROUNDS);
getWindow().setStatusBarColor(getResources().getColor(R.color.primaryColorDark_blue));
}
}else if(Utility.getTheme(getApplicationContext())==THEME\u RED){
setTheme(R.style.AppTheme_Red);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP){
getWindow().addFlags(WindowManager.LayoutParams.FLAG\u DRAWS\u SYSTEM\u BAR\u BACKGROUNDS);
getWindow().setStatusBarColor(getResources().getColor(R.color.primaryColorDark_red));
}
}
}
}

您可以创建一个自定义主题属性,该属性将包含对要使用的背景的引用,并将AppTheme.Red设置为@drawable/buttonshape,AppTheme.blue设置为@drawable/buttonshape\u blue

例如,在值中,您可以有一个attrs.xml文件,其中包含:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="buttonBackground" format="reference" />
</resources>

在themes.xml中:

<style name="AppTheme.Blue" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/primaryColor_blue</item>
    <item name="colorPrimaryDark">@color/primaryColorDark_blue</item>
    <item name="colorAccent">@color/primaryAccent_blue</item>
    <item name="backgroundColor">@color/bianco</item>

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="backgroundColor">@color/bianco</item>
    <item name="buttonBackground">@drawable/buttonshape_blue</item>

</style>

<style name="AppTheme.Red" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/primaryColor_red</item>
    <item name="colorPrimaryDark">@color/primaryColorDark_red</item>
    <item name="colorAccent">@color/primaryAccent_red</item>
    <item name="backgroundColor">@color/bianco</item>

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="buttonBackground">@drawable/buttonshape</item>

</style>

@颜色/原色\蓝色
@颜色/原色深蓝色
@颜色/主色调\蓝色
@颜色/比安科
假的
真的
@颜色/比安科
@可拉拔/纽扣式Shape_蓝色
@颜色/原色\红色
@颜色/原色深红色
@颜色/主色调\红色
@颜色/比安科
假的
真的
@可拉伸/纽扣形状
布局文件中的按钮如下所示:

<Button
android:id="@+id/magic_item"
...
android:background="?attr/buttonBackground"
...
/>

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="buttonBackground" format="reference" />
</resources>
<style name="AppTheme.Blue" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/primaryColor_blue</item>
    <item name="colorPrimaryDark">@color/primaryColorDark_blue</item>
    <item name="colorAccent">@color/primaryAccent_blue</item>
    <item name="backgroundColor">@color/bianco</item>

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="backgroundColor">@color/bianco</item>
    <item name="buttonBackground">@drawable/buttonshape_blue</item>

</style>

<style name="AppTheme.Red" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/primaryColor_red</item>
    <item name="colorPrimaryDark">@color/primaryColorDark_red</item>
    <item name="colorAccent">@color/primaryAccent_red</item>
    <item name="backgroundColor">@color/bianco</item>

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="buttonBackground">@drawable/buttonshape</item>

</style>
<Button
android:id="@+id/magic_item"
...
android:background="?attr/buttonBackground"
...
/>