برنامه اندروید با صفحه تنظیمات اختصاصی
با سلام
دوستان ممنون میشم اگه کسی سورس کد صفحه تنظیمات با امکانات زیر رو داره (یا حداقل شبیه اون) بذاره.
1- روشن ماندن نور صفحه ( به صورت چک باکس)
2- انتخاب فونت (یک کاستوم ویو باز شود و فونت ها از لیست انتخاب شود)
3- اندازه متن با یک سیک بار عوض شود
این صفحه شامل یک متن نمونه باشه که وقتی کاربر از فونت یا اندازه فونت رو عوض می کنه به صورت همزمان این متن نمونه هم تغییر فونت یا اندازه بده
با تشکر از همه دووووووستان


سلام من خودم تنظیمات رو تو صفحه مطالعه قرار میدم که دم دست باشه یه سورس فایل تنظیمات و صفحه اصلی رو بهت میدم
فقط امیدوارم گیجت نکنه آخه من کدام رو فقط خودم میتونم بخونم :)
این فایل سورس صفحه تنظیمات با فایل xml هستش که در این صفحه میتونید رنگ فونت و روشن ماندن صفحه و fullscreen رو انتخاب کنید http://mf2009.persiangig.com/seeting.zip
اینم فایل صفحه مطالعه که تنظیمات بالا توش اعمال میشه و تو این صفحه قابلیت تغییر فونت و اندازه و حالت مطالعه روز و شب رو دارید
http://mf2009.persiangig.com/show.zip

سلام دوست عزیز
ممنون از لطفت
فایل ها دانلود نمیشه ممنون میشم دوباره آپلود کنی
من خودم یه صفحه با sharedpreference ساختم ولی مشکلم اینه که می خوام تغییرات به صورت آنی انجام بشه(نه بعد از باز و بسته کردن برنامه)

یه اسپینتر توی لاینه xml برای تعیین فونت
<Spinner android:id="@+id/sett_font" android:layout_width="wrap_content" android:layout_height="wrap_content" android:entries="@array/fonts" android:gravity="center" android:paddingTop="10dp" android:textAlignment="center" />
حالا یه دو تا imageview برای بزرگ و کوچک کردن متن (کار با سیک بار یکمی سخته ولی بخای اونم میذارم )
<ImageView android:id="@+id/sett_manfi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/sett_nur" android:layout_below="@+id/sett_font" android:src="@drawable/sett_menha" /> <ImageView android:id="@+id/sett_mosbat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/sett_nur" android:layout_alignTop="@+id/sett_manfi" android:src="@drawable/sett_mosbat" />
خوب اینجا ما برای اینکه پیچیده نشه فقط میخایم فونت و سایز رو عوض کنیم حالا میریم سراغ فایل جاواش اینا رو بالای آن کرید میذاریم
public class Setting extends Activity { SharedPreferences sh; int size;// size font String font; TextView txt_test; Typeface my_font;
عناصرمون رو داخل ان کرید تعریف میکنیم
ImageView img_mosbat = (ImageView) findViewById(R.id.sett_mosbat); ImageView img_manfi = (ImageView) findViewById(R.id.sett_manfi); Spinner sp_font = (Spinner) findViewById(R.id.sett_font);
برای اسپینرمون لیسینر میذاریم
sp_font.setOnItemSelectedListener(new cOnItemSelectedListener());// migim
حالا پرفنمنسمون رو معرفی میکنیم
sh = getSharedPreferences("setting", 0); size = sh.getInt("size?", 20);// pishfarz 20 font = sh.getString("font?", "Byekan");// pshfarz fonte Byekan.ttf
یادت باشه فونت دلخواه رو توی پوشه assets بریزی تا به کرش برنخوری حالا اسپینر رو مقدار دهی میکنیم
my_font = Typeface.createFromAsset(getAssets(), font+".ttf"); if(font.equals("Bnazanin")){ sp_font.setSelection(1); }else if (font.equals("Byekan")) { sp_font.setSelection(0); }else if (font.equals("Bziba")) { sp_font.setSelection(2); }
خوب حالا میرم سراغ متن نمونمون که به کاربر نشون بدیم یه تکست ویو تو xml بساز بعد توی فایل جاوات تعریف کن ما اسمش رو گذاشتیم txt_text حالا میام اونو مقدار دهی میکنم به تغییر فونت و اندازه متن
txt_test.setTextSize(size); txt_test.setTypeface(my_font);
خوب حالا میام سراغ بزرگ و کوچک کردن متن اون دو کمه بزرگ و کوچک رو مقدار دهی میکنیم و توی شرید پرفنمنس سیوش میکنیم
img_mosbat.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub size++; Log.i(DBAdapter.TAG, "size=" + size); txt_test.setTextSize(size); } }); img_manfi.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub size--; Log.i(DBAdapter.TAG, "size=" + size); txt_test.setTextSize(size); } });
حالا یه چیزی یادمون رفت باید بگیم روی آیتم های اسپینر کلیک شد چه اتفاقی بیوفته تو کد تعریف میکنیم
public class cOnItemSelectedListener implements OnItemSelectedListener { @Override public void onItemSelected(AdapterView<?> parent, View arg1, int post, long id) { font = parent.getItemAtPosition(post).toString(); Log.i(DBAdapter.TAG, font); my_font = Typeface.createFromAsset(getAssets(), font + ".ttf"); txt_test.setTypeface(my_font); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }
خوب حالا میومنه ذخیره اطلاعات میگیم اگر کاربر از صفحه رفت بیرن اطلاعات رو سیو کن
protected void onPause() { // TODO Auto-generated method stub super.onPause(); SharedPreferences.Editor ed = sh.edit(); ed.putInt("size?", size); ed.putString("font?", font); ed.commit(); }
خوب کار صفحه تنظیمات تموم شد میریم سراغ صفحه نمایش که میخایم تغییرا ت توش اعمال شه
بالای آن کرید متغییرهامون رو معرفی میکنیم
public class main extends Activity { SharedPreferences sh; int size;// size font String font; Typeface my_font;
خوب حالا باید سریپد پرفنمنس رو بازیابی کنیم
sh = getSharedPreferences("setting", 0); size = sh.getInt("size?", 20); font = sh.getString("font?", "Byekan"); my_font = Typeface.createFromAsset(getAssets(), font + ".ttf");
خوب کار تمومه و تکس ویو که میخایم اطلاعات رو نمایش بدیم رو مقدار دهی میکنم
txt_matn.setTextSize(size); txt_matn.setTypeface(my_font);

قبل از طرح این سوال من خودم تا این مرحله پیش رفته بودم اما نمیتونستم تغییرات رو آنی ببینم
ببین میتونی کدهای خودم رو یجوری تغییر بدی که اوکی بشه
این فایل setting.java
package jpdesign.minedic; import jpdesign.minedic.R.xml; import android.R.id; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class Setting extends PreferenceActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.setting); addPreferencesFromResource(R.xml.prosettings); String font = G.prefrences.getString("Font_selector", "Zar"); String path = "font/"+font+".ttf"; Typeface myfont=Typeface.createFromAsset(getAssets(),path); //TextView sample = (TextView) findViewById(R.id.txtSample); //sample.setTypeface(myfont); Button BackB = (Button)findViewById(R.id.BackB); BackB.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub finish(); overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out); } }); } public void onSharedPreferenceChanged (SharedPreferences Setting, String Font_selector){ super.onResume(); this.onCreate(null); } @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out); } }
اینم فایل prosetting.xml در پوشه xml
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:layout="@layout/setting"> <CheckBoxPreference android:title="نور صفحه روشن بماند" android:key="LIGHTS"/> <PreferenceCategory android:title="انتخاب فونت"></PreferenceCategory> <ListPreference android:title="فونت دلخواه خود را انتخاب نمایید" android:key="Font_selector" android:entries="@array/fonts" android:entryValues="@array/FontValues" android:defaultValue="Zar"/> </PreferenceScreen>
و فایل setting.xml در پوشه layout
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/yellow" android:gravity="start" android:orientation="vertical" android:padding="0dp" > <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:layout_marginTop="0dp" style="@style/mylistview" > </ListView> <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@android:id/list" android:layout_alignParentBottom="true" android:layout_marginBottom="0dp" android:scaleType="fitXY" android:src="@drawable/tool" /> <Button android:id="@+id/BackB" style="@drawable/clear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@android:id/list" android:layout_alignTop="@+id/imageView1" android:background="@drawable/back" android:minHeight="36dip" android:minWidth="36dip" /> </RelativeLayout>
حال مشکلات من
1- نمی توانم رنگ متن تنظیمات را تغییر دهم
2- تغییرات به صورت دینامیک ذخیره نمی شود و تنها پس از شروع مجدد برنامه تغییر می کند
3- چگونه می توانم یک متن نمونه در این صفحه قرار دهم که همزمان با انتخاب کاربر فونت و سایز آن تغییر یابد

این کد جاوا تقدیم شما
package jpdesign.minedic; import ir.esfandune.book.Setting.cOnItemSelectedListener; import ir.esfandune.database.DBAdapter; import android.R.id; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemSelectedListener; public class Setting extends PreferenceActivity { SharedPreferences sh; int size;// size font String font; TextView txt_test; Typeface my_font; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.setting); ImageView img_mosbat = (ImageView) findViewById(R.id.sett_mosbat); ImageView img_manfi = (ImageView) findViewById(R.id.sett_manfi); Spinner sp_font = (Spinner) findViewById(R.id.sett_font); txt_test = (TextView) findViewById(R.id.sett_test);// in // txtview // ro baraye // nemayeshe // taghirat // be karbar // gharar // dadam sp_font.setOnItemSelectedListener(new cOnItemSelectedListener());// migim // gush // be // zang // bash // vaghti // ruye // spinner // kelik // shod // un // class // e // ro // ejra // kon sh = getSharedPreferences("setting", 0); size = sh.getInt("size?", 20);// pishfarz 20 // bashe font = sh.getString("font?", "Byekan");// pshfarz fonte Byekan.ttf my_font = Typeface.createFromAsset(getAssets(), font+".ttf"); if(font.equals("Bnazanin")){ sp_font.setSelection(1); }else if (font.equals("Byekan")) { sp_font.setSelection(0); }else if (font.equals("Bziba")) { sp_font.setSelection(2); } // ye log migirim bebinim hame chi doros load shode? txt_test.setTextSize(size); txt_test.setTypeface(my_font); img_mosbat.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub size++; Log.i(DBAdapter.TAG, "size=" + size); txt_test.setTextSize(size); } }); img_manfi.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub size--; Log.i(DBAdapter.TAG, "size=" + size); txt_test.setTextSize(size); } }); } public class cOnItemSelectedListener implements OnItemSelectedListener { @Override public void onItemSelected(AdapterView<?> parent, View arg1, int post, long id) { font = parent.getItemAtPosition(post).toString(); Log.i(DBAdapter.TAG, font); my_font = Typeface.createFromAsset(getAssets(), font + ".ttf"); txt_test.setTypeface(my_font); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); SharedPreferences.Editor ed = sh.edit(); ed.putInt("size?", size); ed.putString("font?", font); ed.commit(); //ye log am ke mizanim } }
اینک کد xml تقیدم شما
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Setting" android:background="#2b2937"> <ImageView android:id="@+id/ImageView01" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:scaleType="fitXY" android:src="@drawable/abt_er" /> <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:scaleType="fitXY" android:src="@drawable/abt_er" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/ImageView01" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:drawableRight="@drawable/main_setting" android:text="تنظیمات" android:gravity="center" /> <ScrollView android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/imageView1" android:layout_alignParentLeft="true" android:layout_below="@+id/ImageView01" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <Spinner android:id="@+id/sett_font" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/sett_nur" android:layout_below="@+id/sett_nur" android:layout_toRightOf="@+id/imageView2" android:background="#1abc9c" android:entries="@array/fonts" android:gravity="center" android:paddingTop="10dp" android:textAlignment="center" /> <ImageView android:id="@+id/sett_manfi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/sett_nur" android:layout_below="@+id/sett_font" android:src="@drawable/sett_menha" /> <ImageView android:id="@+id/sett_mosbat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/sett_nur" android:layout_alignTop="@+id/sett_manfi" android:src="@drawable/sett_mosbat" /> </RelativeLayout> </ScrollView> <TextView android:id="@+id/sett_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_alignParentBottom="true" android:layout_alignTop="@+id/imageView1" android:text="" android:gravity="center" /> </RelativeLayout>

با سلام
طی سرچی که در مورد فونت داشتم به این تاپیک رسیدم. وقتی به اکتیویتی مورد نظرم میرم برنامه کرش میکنه. از خط زیر کرش میکنه...
my_font = Typeface.createFromAsset(getAssets(), font + ".ttf");
خط زیر هم علت کرش هستش
native typeface cannot be made == // فونت مادری نمی تواند ساخته شود
من فونت ها رو با همون نامی که ذکر شده در پوشه font در Assets قرار دادم.
ممنون...

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