بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
تغیر عکس پس زمینه برنامه
مدیریت گفتگو
آخرین تغییر: 11 سال پیش
من میخواهم تو تنظیمات برنامه با زدن یک دکمه عکس پس زمینه کل برنامه رو عوض کنم کسی میتونه کمکم کنه؟!
پاسخها 2
مشاهده پاسخ صحیح
پاسخ صحیح
کارهای که من انجام دادم
ی متغیر در کلاس G تعریف کردم به این شکل
public class G extends Application {
public static Context context;
public static String defaultBackground;
public static SharedPreferences preference;
public static Activity currentActivity;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
preference = getSharedPreferences(getPackageName(), Context.MODE_PRIVATE);
defaultBackground = preference.getString("default_background", "theme00");
}
}
حالا تو اکتیوتی تنظیمات چند تا دکمه گذاشتم و یک فیلد تعریف کردم که با کلیک رو هر دکمه یک مقدار رو در فیلد میریخت
بعد با یک دکمه مقدار ریخته شده در فیلد رو توی همون متغیر G میریخت
public class ActivitySettings extends Activity {
public String theme;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
G.currentActivity = this;
setContentView(R.layout.settings);
Button btnTheme = (Button) findViewById(R.id.btnTheme);
final Button btnSev = (Button) findViewById(R.id.btnSev);
findViewById(R.id.btnTheme01).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
theme = "theme00";
}
});
findViewById(R.id.btnTheme02).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
theme = "theme01";
}
});
findViewById(R.id.btnTheme03).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
theme = "theme02";
}
});
btnSev.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (theme != null) {
G.defaultBackground = theme;
SharedPreferences.Editor editor = G.preference.edit();
editor.putString("default_background", G.defaultBackground);
editor.commit();
}
}
});
}
}
بعد ایدی همه LinearLayout های اکتیویتی ها رو lit گذاشتم بعد تو onCreate همه اکتیویتی ها شرط گذاشتم که اگر مقدار اون متغیر کلاس G فلان بود فلان عکس واس بکگراند LinearLayoutکه ایدیش lit هست ست بکنه
public class ActivityMail extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
G.currentActivity = this;
setContentView(R.layout.mail);
final LinearLayout lit = (LinearLayout) findViewById(R.id.lit);
if (G.defaultBackground.equals("theme00")) {
lit.setBackgroundResource(R.drawable.backgrund);
} else if (G.defaultBackground.equals("theme01")) {
lit.setBackgroundResource(R.drawable.backgrund12);
} else if (G.defaultBackground.equals("theme02")) {
lit.setBackgroundResource(R.drawable.backgrund17);
} else if (G.defaultBackground.equals("theme03")) {
lit.setBackgroundResource(R.drawable.backgrund19);
}
نمیدونم راه اصلیش همینه یا نه! واس من ک همین جواب داد منم از همین استفاده کردم!
نظرات
در کل منم همین مد نظرم بود ، الان خودت نوشتیش خیلی ارزش داره تا اینکه اونموقع یکی دیگه همینو مینوشت برات ، موفق باشی
خیلی خوبه. فقط یه نکته ای! الان مثلا تو از صفحه اصلی میری به تنظیمات و تم رو تنظیم میکنی و برمیگردی به صفحه اصلی. آیا الان که برگشتی تم انتخابی اعمال شده؟ احتمالا نه! برای اعمالش باید از برنامه خارج بشه دوباره وارد بشی یا برای اکتیویتی هایی که باز میکنی اعمال میشه درسته؟ برای اینکه این مشکل رو رفع کنی بهتره کدهای آخرت رو به جای oncreate توی onresume بذاری ;)
بجای اینم از Listener مربوط استفاده کنه نور علی نور میشه دیگه :) لینک
اره اعمال میشه صادق جان چون با دکمه ذخیره از اول باز میکنم اکتیویتی رو
اپریت جان من که سر در نیاوردم از لینکی که دادی!
مزیتش اینه که تغییرات در لحظه اجرا میشه ، یعنی اگه داخل همین اکتیوتی زمینه مورد نظر رو تغییر بدی همون لحظه پس زمینه هم تغییر میکنه :
public class ActivityMail extends Activity {
public String theme;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
G.currentActivity = this;
setContentView(R.layout.mail);
Button btnTheme = (Button) findViewById(R.id.btnTheme);
final Button btnSev = (Button) findViewById(R.id.btnSev);
findViewById(R.id.btnTheme01).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
theme = "theme00";
}
});
findViewById(R.id.btnTheme02).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
theme = "theme01";
}
});
findViewById(R.id.btnTheme03).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
theme = "theme02";
}
});
btnSev.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (theme != null) {
G.defaultBackground = theme;
SharedPreferences.Editor editor = G.preference.edit();
editor.putString("default_background", G.defaultBackground);
editor.commit();
}
}
});
}
OnSharedPreferenceChangeListener myPrefListner = new OnSharedPreferenceChangeListener(){
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if(key.equals("default_background")) {
final LinearLayout lit = (LinearLayout) findViewById(R.id.lit);
if (G.defaultBackground.equals("theme00")) {
lit.setBackgroundResource(R.drawable.backgrund);
} else if (G.defaultBackground.equals("theme01")) {
lit.setBackgroundResource(R.drawable.backgrund12);
} else if (G.defaultBackground.equals("theme02")) {
lit.setBackgroundResource(R.drawable.backgrund17);
} else if (G.defaultBackground.equals("theme03")) {
lit.setBackgroundResource(R.drawable.backgrund19);
}
}
}
};
@Override
protected void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(myPrefListner);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(myPrefListner);
}
نظرات
S P ! R ! T جان اگر بخوای این تغییرات در یک اکتیوتی دیگه اعمال بشه کدام قسمت برنامه تغییر می کنی و تغییرات در اکتیوتی دو چگونه خواهد بود ، ممنون میشم راهنمایی کنی
lit هر اکتیویتی رو با مقدار .defaultBackground ست کن
دوست عزیزم Mir Unknown راستش من متوجه نشدم منظورت چیه ! ببین من میخام وقتی یک سری تصویر و دکمه در activity 1 قرار بگیره و وقتی تصویری از activity 1 انتخاب میشه ، بتونیم اون تصویر رو به عنوان بک گراند activity 2 انتخاب کرد ، ممنون میشم اگه راهنمایی کنی ؟
این لینک رو یه نگاه کنین.http://answers.uncocoder.com/question/4684/ایجاد-بک-گراند-برای-یک-اکتیوتی
ممنونم دوست عزیز atras ، این تاپیک رو خودم پرسیده بودم ، تا به این کد ها رسیدم که دوستان معرفی کرده بودم ، اما در این مرحله به مشکل خوردم ،که سوالمو پرسیدم و نمیدونم باید چطوری برنامه رو تغییر بدم ،ممنون میشم اگه راهنمایی کنی ؟
من تا جایی که بلد بودم در پاسخ بالا گذاشتم واس خودم که جواب داده در برنامم که لینکش تو پروفایلمه میتونید ببینید.شمام یکم ور برید حتما میتونید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات