قابلیت تغییر تم در اپلیکیشن

0 امتیاز
66 بازدید
سوال شده مرداد 13, 1395 توسط android  

سلام وقت بخیر

من میخوام با استفاده از یک سوییچ تیو تنظیمات برنامم قابلیتی رو اضافه کنم که وقتی کاربر سوییچ کرد تم برنامه عوض بشه.کسی هست بتونه کمکم کنه؟

کدها ی فایل جاوا رو هم میزارم.خودم یه سری کارا انجام دادم اما وقتی سوییچ میکنم صفحه سیاه میشه و همونجور میمونه

package com.example.mint.bookrevision.activity;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.SwitchCompat;
import android.widget.CompoundButton;

import com.example.mint.bookrevision.R;

public class Activity_settings extends AppCompatActivity {
	private SwitchCompat switchCompat;

	@Override
	protected void onCreate(Bundle savedInstanceState) {

		final SharedPreferences shared = getSharedPreferences("prefse", 0);
		final Boolean theme = shared.getBoolean("theme?", false);

		if (!theme){
			setTheme(R.style.AppTheme);

		}else {
			setTheme(R.style.AppTheme1);

		}
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_activity_settings);

		switchCompat = (SwitchCompat) findViewById(R.id.switch_Settings);


		switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

				if (switchCompat.isChecked()){

					SharedPreferences.Editor editor = shared.edit();
					editor.putBoolean("theme?", false);
					editor.commit();
					recreate();

				}else {

					SharedPreferences.Editor editor = shared.edit();
					editor.putBoolean("theme?", true);
					editor.commit();
					recreate();

				}

			}
		});
	}
}

 

این مطلب را به اشتراک بگذارید

1 پاسخ

0 امتیاز
پاسخ داده شده مرداد 13, 1395 توسط sajjadfcb  
انتخاب شده مرداد 14, 1395 توسط sajjadfcb
 
بهترین پاسخ

سلام

در کد شما همه چی درسته فقط باید حالت سویچ رو توی SharedPreferencesذخیره کنید.

کدتون باید اینطوری باشه

public class MainActivity extends AppCompatActivity {

    SwitchCompat switchCompat;
    SharedPreferences shared;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        shared = getSharedPreferences("prefse", 0);
        final Boolean theme = shared.getBoolean("theme?", false);

        if (!theme) {
            setTheme(R.style.AppTheme);

        } else {
            setTheme(R.style.AppTheme1);

        }

        setContentView(R.layout.activity_main);


        switchCompat = (SwitchCompat) findViewById(R.id.switch_Settings);


        boolean mySwitch = shared.getBoolean("mySwitch", true);
        switchCompat.setChecked(mySwitch);





        switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

                if (switchCompat.isChecked()) {

                    SharedPreferences.Editor editor = shared.edit();
                    editor.putBoolean("theme?", false);
                    editor.commit();
                    recreate();


                } else {

                    SharedPreferences.Editor editor = shared.edit();
                    editor.putBoolean("theme?", true);
                    editor.commit();
                    recreate();


                }

            }
        });

    }

    @Override
    protected void onPause() {
        super.onPause();
        SharedPreferences.Editor editor = shared.edit();
        editor.putBoolean("mySwitch", switchCompat.isChecked());
        editor.commit();
    }
}

موفق باشید.

دارای دیدگاه مرداد 14, 1395 توسط android  
دست شما درد نکنه تشکر

حالا اگر من بخوام با اینکار تم کل برنامه عوض بشه راهکار چیه؟ با این کدها فقط همون اکتیویتی تغییر تم داده میشه
دارای دیدگاه مرداد 14, 1395 توسط sajjadfcb  

خواهش می کنم.

برای این کار کافیه کد هایی که قبل از متد  setContentView   قرار دارند رو توی اکتیویتی مورد نظر قبل از متد  setContentView  قرار بدید.

یعنی این قسمت

SharedPreferences shared = getSharedPreferences("prefse", 0);
final Boolean theme = shared.getBoolean("theme?", false);

if (!theme)
{
    setTheme(R.style.AppTheme);
}
else
{
    setTheme(R.style.AppTheme1);
}

موفق باشید.

دارای دیدگاه مرداد 14, 1395 توسط android  
ویرایش شده مرداد 14, 1395 توسط android
ممنونم درست شد
دارای دیدگاه مرداد 14, 1395 توسط sajjadfcb  
خواهش می کنم
دارای دیدگاه مرداد 14, 1395 توسط android  
فقط مشکلی که هست اینه که توی باقی اکتیویتی ها نمیشه از recreate() استفاده کرد رنامه تو حلقه میفته
دارای دیدگاه مرداد 14, 1395 توسط sajjadfcb  
از دستور recreate فقط  باید تو اکتیویتی تنظیمات استفاده کنید تا کاربر بتونه تغییرات رو همون لحظه مشاهده کنه دیگه تو بقیه اکتیویتی ها لازم نیست استفاده بشه

693 سوال

669 پاسخ

1,169 دیدگاه

294 کاربر

به خانه برنامه نویسان ایرانی خوش آمدید . سوالتان را به سادگی هرچه تمام تر پرسیده و پاسخ آن را دریافت کنید.
ذکات علم نشر آن است.


لطفا از Android Studio استفاده بفرمایید

این مطلب را به اشتراک بگذارید

ali.ashkaran@gmail
ما .....
  • سعی بر پاسخگویی به سوالات دیگران داریم.
  • به سوال و یا نظر دیگران احترام می گذاریم .
  • این وبسایت را به دیگران معرفی می کنیم.
  • همواره صمیمیت و ادب را رعایت می کنیم.
  • به سوالمان برچسب های مرتبط اضافه می کنیم.
  • در حین طرح سوال فرد خاصی را مخاطب قرار نمی دهیم .
...