2017-02-21 2 views
0

Привет У меня есть 1 активность с 3 кнопками, теперь я создал возможность изменить приложение темы, и здесь все хорошо, но я не знаю, как перейти от buttoshape.xml к buttoshape_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> 

это моя кнопка в XML

<Button 
    android:id="@+id/magic_item" 
    android:text="Magic Item" 
    android:textColor="#FFFFFF" 
    android:textSize="25dp" 

    android:layout_width="match_parent" 
    android:layout_height="60dp" 
    android:background="@drawable/buttonshape" 
    android:shadowColor="#A8A8A8" 
    android:shadowDx="0" 
    android:shadowDy="0" 
    android:shadowRadius="5" 
    /> 

и это мой buttonshape.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > 
<corners 
    android:radius="14dp" 
    /> 
<gradient 
    android:angle="45" 
    android:centerX="90%" 
    android:centerColor="#ec2127" 
    android:startColor="#CC1414" 
    android:endColor="#FFFFFF" 
    android:type="linear" 
    /> 
<padding 
    android:left="0dp" 
    android:top="0dp" 
    android:right="0dp" 
    android:bottom="0dp" 
    /> 
<size 
    android:width="270dp" 
    android:height="60dp" 
    /> 
<stroke 
    android:width="3dp" 
    android:color="#FFFFFF" 
    /> 

моя утилита

public class Utility { 


    public static void setTheme(Context context, int theme) { 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
     prefs.edit().putInt(context.getString(R.string.prefs_theme_key), theme).apply(); 
    } 
    public static int getTheme(Context context) { 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
     return prefs.getInt(context.getString(R.string.prefs_theme_key), -1); 
    } 
} 

и BaseActivity

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)); 
      } 
     } 
    } 
} 

ответ

0

Вы можете создать атрибут пользовательской темы, которая будет содержать ссылку на фоне использования и установить его на @ drawable/buttonshape для AppTheme.Red и до @ drawable/buttonshape_blue для AppTheme.Blue.

E.g. в значений вы могли бы 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> 

Ваша кнопка в файле макета будет выглядеть это:

<Button 
android:id="@+id/magic_item" 
... 
android:background="?attr/buttonBackground" 
... 
/> 
Смежные вопросы