如何改变所有活动的背景?

时间:2018-07-02 13:14:25

标签: java android mobile

我也会尝试:

public Button button;  
public View background;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_option);

    button = (Button)findViewById(R.id.color);
    background = findViewById(R.id.colorBackg);

    button.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            int colorCreat = Color.rgb(255, 255, 255);
            background.setBackgroundColor(colorCreat);
        }
    });

}

它可以工作,但是当我更改活动时,颜色会重置。如何永久更改所有背景的颜色?谢谢。

2 个答案:

答案 0 :(得分:3)

在项目的res目录中的styles.xml下创建样式

<resources xmlns:tools="http://schemas.android.com/tools">

   <!-- Base application theme. -->
    <style name="app_theme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@android:color/black</item>
    </style>

</resources>

然后可以将上述主题应用于清单中的应用程序元素

<application
 android:theme="@style/Theme.Activity.Default"/>

因此,这意味着所有活动都将继承Application标记中声明的上述样式,除非任何单独的Activity覆盖它并指定其他样式。

希望有帮助。

答案 1 :(得分:0)

就像answeredMayank Bhatnagar一样,您应该在styles.xml文件中创建样式。有关详细的实现,请参见the guide


如果您希望能够动态更改主题,建议您使用Settings来定义要使用的主题。然后在您的活动中倾听偏好更改。

首先创建一个用于更改首选项的监听器,该监听器将对样式更改做出反应。

public class StylePreferenceChangeListener implements OnSharedPreferenceChangeListener {

    //String constant used as ID to the style preference (used here and in SettingActivity)
    public static String PREFERENCE_STYLE_ID = "preference.style";

    //The activity that we want to modify style
    private Activity activity;

    public StylePreferenceChangeListener(Activity activity) {
        super();
        this.activity = activity;
    }

    // listener implementation
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
        if(PREFERENCE_STYLE_ID.equals(key)) {
            int newStyleId = prefs.getInt(key, R.style.default_style);
            activity.getTheme.applyStyle(newStyleId, true);
    }

}

在您的活动中,创建此侦听器的实例。然后在onResume()/ onPause()中注册/注销。

public class myActivity extends Activity {

    //Our listener reference
    StylePreferenceChangeListener myListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate();
        setContentView(R.layout.myactivity);
        //create instance now so we are sure the activity exist
        myListener = new StylePreferenceChangeListener(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //register our listener
        getSharedPreferences().registerOnSharedPreferenceChangeListener(myListener);
    }

    protected void onPause() {
        super.onPause();
        //unregister our listener
        getSharedPreferences().unregisterOnSharedPreferenceChangeListener(myListener);
    }

    protected void onDestroy() {
        super.onDestroy();
        //The activity is meant to be destroy, makes no sense to keep our listener
        //Drop his reference to allow garbage collecting
        myListener = null;
    }

}