بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

تغیر عکس پس زمینه برنامه

مدیریت گفتگو
Mir Unknown 12 سال پیش
آخرین تغییر: 11 سال پیش

من میخواهم تو تنظیمات برنامه با زدن یک دکمه عکس پس زمینه کل برنامه رو عوض کنم کسی میتونه کمکم کنه؟!

نظرات

mohsen-jj 12 سال پیش
اون Layout ( یا هرچیز دیگه ای ) کلیت رو تعریف کن و بعد متود setBackground رو براش صدا بزن و رنگ یا از drawable عکست رو واردش کن . البته این سوالا رو با یه سرچ ساده میتونی جوابشون بگیری ا :)
Mir Unknown 12 سال پیش
با جستجو بجا خوبی نرسیدم اگه شما رسیدید لینک بدید لطفا
Spirit 12 سال پیش
اینجوری میشه پس زمینه رو عوض کرد لینک حالا میشه این کار رو توی متد onResume انجام بده ، و بررسی کن کدوم گزینه انتخاب شده ، و متناسب با اون عکست رو ست کن.
Spirit 12 سال پیش
خب چیکار کنم عزیز من ، شما بگو
Mir Unknown 12 سال پیش
من اگه با سرچ میتونستم تو سایت های انگلیش پیدا کنم اینجا سوال نمیکردم.ی جا یکم در این باره توضیح داده بودید گفتم شاید میتونید کمک کنید. به هر حال مرسی از کمکتون
Spirit 12 سال پیش
آخه کاری که میخوایید انجام بدید اونقدر سخت و پیچیده نیست که تو سایتهای خارجی یه آموزش انحصاری براش بزارن ، با همین آموزش های خودمون میتونید انجام بدید. میخوام خودتون یاد بگیرید. شروع کنیم؟
Mir Unknown 12 سال پیش
اره خودم حلش کردم.مرسی
sadeghbarout 12 سال پیش
خداروشکر ولی لااقل اینجوری زحمت بچه ها رو نمیبردی زیر سوال! spiritکه گفت باید تو onResume کدش رو بذاری. لینک کد هم داد!
Mir Unknown 12 سال پیش
من میخوام از ی اکتیوتی کاری کنم بک گراند کل اکتیویتی ها عوض بشن.چیزی که گفت با لینکی ک داد بهم هیچ کمکی نکردن
sadeghbarout 12 سال پیش
خب بک گراند کل اکتیویتی ها رو کجا باید عوض کنی؟ خب تو onresume دیگه (oncreate هم میشه ولی وقتی بک میزنی تصویر عوض نمیشه) حالا که گذشت ولی لااقل کد خودت رو بذار اگه سوال یکی دیگه بود لینک بدیم به اینجا ;)
Mir Unknown 12 سال پیش
کامل شد میزارم فعلا فقط تونستم رنگشو عوض کنم واس عکس هنوزم مشکل دارم

پاسخ‌ها 2

مشاهده پاسخ صحیح
Mir Unknown 12 سال پیش

 پاسخ صحیح

کارهای که من انجام دادم

ی متغیر در کلاس 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);
}

نمیدونم راه اصلیش همینه یا نه! واس من ک همین جواب داد منم از همین استفاده کردم!

نظرات

Spirit 12 سال پیش
در کل منم همین مد نظرم بود ، الان خودت نوشتیش خیلی ارزش داره تا اینکه اونموقع یکی دیگه همینو مینوشت برات ، موفق باشی
sadeghbarout 12 سال پیش
خیلی خوبه. فقط یه نکته ای! الان مثلا تو از صفحه اصلی میری به تنظیمات و تم رو تنظیم میکنی و برمیگردی به صفحه اصلی. آیا الان که برگشتی تم انتخابی اعمال شده؟ احتمالا نه! برای اعمالش باید از برنامه خارج بشه دوباره وارد بشی یا برای اکتیویتی هایی که باز میکنی اعمال میشه درسته؟ برای اینکه این مشکل رو رفع کنی بهتره کدهای آخرت رو به جای oncreate توی onresume بذاری ;)
Spirit 12 سال پیش
بجای اینم از Listener مربوط استفاده کنه نور علی نور میشه دیگه :) لینک
Mir Unknown 12 سال پیش
اره اعمال میشه صادق جان چون با دکمه ذخیره از اول باز میکنم اکتیویتی رو
Mir Unknown 12 سال پیش
اپریت جان من که سر در نیاوردم از لینکی که دادی!
Spirit 12 سال پیش

مزیتش اینه که تغییرات در لحظه اجرا میشه ، یعنی اگه داخل همین اکتیوتی زمینه مورد نظر رو تغییر بدی همون لحظه پس زمینه هم تغییر میکنه :

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

نظرات

sadra 11 سال پیش
S P ! R ! T جان اگر بخوای این تغییرات در یک اکتیوتی دیگه اعمال بشه کدام قسمت برنامه تغییر می کنی و تغییرات در اکتیوتی دو چگونه خواهد بود ، ممنون میشم راهنمایی کنی
Mir Unknown 11 سال پیش
lit هر اکتیویتی رو با مقدار .defaultBackground ست کن
sadra 11 سال پیش
دوست عزیزم Mir Unknown راستش من متوجه نشدم منظورت چیه ! ببین من میخام وقتی یک سری تصویر و دکمه در activity 1 قرار بگیره و وقتی تصویری از activity 1 انتخاب میشه ، بتونیم اون تصویر رو به عنوان بک گراند activity 2 انتخاب کرد ، ممنون میشم اگه راهنمایی کنی ؟
ATRAS 11 سال پیش
این لینک رو یه نگاه کنین.http://answers.uncocoder.com/question/4684/ایجاد-بک-گراند-برای-یک-اکتیوتی
sadra 11 سال پیش
ممنونم دوست عزیز atras ، این تاپیک رو خودم پرسیده بودم ، تا به این کد ها رسیدم که دوستان معرفی کرده بودم ، اما در این مرحله به مشکل خوردم ،که سوالمو پرسیدم و نمیدونم باید چطوری برنامه رو تغییر بدم ،ممنون میشم اگه راهنمایی کنی ؟
Mir Unknown 11 سال پیش
من تا جایی که بلد بودم در پاسخ بالا گذاشتم واس خودم که جواب داده در برنامم که لینکش تو پروفایلمه میتونید ببینید.شمام یکم ور برید حتما میتونید

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