Как изменить фон всей деятельности? - PullRequest
0 голосов
/ 02 июля 2018

Я тоже попробую:

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 голосов
/ 03 июля 2018

Как уже ответил Mayank Bhatnagar , вы должны создать стиль внутри файла styles.xml. Подробнее см. в руководстве .


Если вы хотите иметь возможность динамически менять тему, я рекомендую вам использовать Настройки , чтобы определить, какие из них использовать. А затем в ваших действиях выслушать изменение предпочтений.

Сначала создайте прослушиватель для изменения предпочтений, который будет реагировать на изменение стиля.

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

}
0 голосов
/ 02 июля 2018

Создайте стиль в файле styles.xml в каталоге res вашего проекта

<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, если только какое-либо отдельное действие не переопределит его, указав какой-либо другой стиль.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...