آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نوشتن کلاس سفارشی برای preferences (حل نشده)

override  11 سال پیش  11 سال پیش
+2 0

راهی برای سفارشی کردن و تغییر ظاهر دیالوگ ها و آیتم های  sharedpreferences وجود داره؟ یا مثلاً از دیالوگ ها و customController هایی که  خودمون طراحی کردیم به جای عناصری که به صورت پیشفرض در نظر گرفته شده استفاده کنیم؟ ممنون

0 0
پیشنهاد میکنم خودت یه لایه باز کنی و توش پریفرنس ها رو به کار بگیری . (11 سال پیش)
0 0
بله میشه ولی هدفم اینه که یاد بگیرم چه طوری یه Custom Preference class بسازم (11 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
override  11 سال پیش
0 0

راهی که به نظرم میرسه اینه که یه دیالوگ با استفاده از Layout که طراحی کردیم  به این  صورت تعریف کنیم

 
 final Dialog dialog = new Dialog(Activitymain.this);

dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog);

و preferences رو با استفاده از کد زیر تعیین کنیم ولی خب این مدنظرم نیست.راه دیگه ای نیست؟

 
 preferences = PreferenceManager.getDefaultSharedPreferences(context);
 SharedPreferences.Editor editor = preference.edit();
editor.putString("key", value)/ or editor.putBoolean("key", true);
editor.commit();
پاسخ به سوال 
override  11 سال پیش
0 0

خب من قصد داشتم براساس نیازی که دارم آیتم هایی رو به ListPreference اضافه کنم و ظاهر دیالوگ باکس و طراحی اونو تا حدودی مطابق با سلیقه ی خودم تغییر بدم تا حالا هر چی سرچ کردم فقط به این نتیجه ختم شد که بهترین راه نوشتن یه کلاس اختصاصی برای preferences هست خب بهترین راهنمایی که پیدا کردم مستندات و آموزش های گوگل بود: Settings , DialogPreference و سورس های پراکنده که هر کدوم به یه روش عمل کردن ، هدف و سعی من بر اینه که یه کلاس برای انتخاب فونت بنویسم البته راه حل آسونتر استفاده از روشیه که در جواب قبلی توضیح دادم خیلی هم دردسر کمتری داره ولی نمیدونم چرا اصرار دارم از این روش استفاده نکنم :) بگذریم خب اینجا از همین اول به راهنمایی دوستان نیاز دارم اگر تونستم کارو به جایی برسونم و سوادم اجازه داد حتماً به طور کامل سورس رو همینجا میذارم

    public class PreferenceTextFont extends DialogPreference {

public PreferenceTextFont(Context context, AttributeSet attrs) {
super(context, attrs);
createDialog();

}


public PreferenceTextFont(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
createDialog();
}


private void createDialog() {
setDialogLayoutResource(R.layout.preference_font_dialog);
setPositiveButtonText(R.string.ok_buton);
setNegativeButtonText(R.string.cancel_button);
}


@Override
protected void onBindDialogView(View view) {

super.onBindDialogView(view);

RadioButton radioFontDastnevis = (RadioButton) view.findViewById(R.id.radioFontDastnevis);
RadioButton radioFontKoodak = (RadioButton) view.findViewById(R.id.radioFontKoodak);
RadioButton radioFontNazanin = (RadioButton) view.findViewById(R.id.radioFontNazanin);

}

}

}

حالا اولین مشکل اینه که چه طور RadioButton رو که برای دیالوگ باکس در layout مربوط قرار دادم اینجا استفاده کنم اینجا برای ایجاد دیالوگ باکس از متد CreateDialog استفاده کردم ولی حالا چه طوری باید این RadioButtonرو پیدا کنم استفاده از onBindDialogView روش درستیه؟ اگر نیست چه طور باید این کار رو انجام بدم؟

0 0
اگه نمونه کدی هم کسی سراغ دارید ممنون میشم معرفی کنید (11 سال پیش)
+1 0
من نمیدونم دقیقا جریان بالا چیه ، اما به نظر میرسه باید از inflater برای تبدیل xml ها به view مورد نظر استفاده کنی (11 سال پیش)
0 0
درسته توی بیشتر نمونه ها از همین روشinflater استفاده شده باید امتحان کنم ولی نمیدونم اگه بخوام از CreateDialog استفاده کنم چه جوریه؟سعی میکنم هر دو روش رو امتحان کنم (11 سال پیش)
0 0
خب کد بالا اصلاح شد الان تا اینجا داره درست کار میکنه ظاهراً onBindView جواب میده :) (11 سال پیش)
پاسخ به سوال 
override  11 سال پیش
0 0

ما میتونیم یه کلاس اختصاصی بسته به نیاز خودمون بنویسم و اونو به شکل زیر مثلا ًدر preference.xml معرفی کنیم

 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">


<com.example.app.PreferenceTextFont

android:defaultValue="b_koodak"
android:dialogTitle="@string/font_dialog_title"
android:key="USER_SELECTED_FONT"
android:persistent="true"
android:summary="@string/font_dialog_summary"
android:title="@string/font_dialog_title"/>

</PreferenceScreen>

 

پاسخ به سوال 
override  11 سال پیش
0 0

امروز خیلی دارم به خودم جواب میدم :) حالا یه سئوال دارم متد onGetDefaultValue چه کاربردی داره من هر چی میخونم از ترجمه تحت الفظی چیزی دستگیرم نمیشه که آخرش کاربردش چیه ؟ متن اصلی به همراه ترجمه خودم رو میذارم ببینید چیزی متوجه میشید به منم بگید :

       Providing a default Value /ارائه مقدار پیش فرض

If the instance of your Preference class specifies a default value (with the android:defaultValue attribute), then the system calls onGetDefaultValue() when it instantiates the object in order to retrieve the value. You must implement this method in order for the system to save the default value in the SharedPreferences. For example:

اگر نمونه ی کلاس تنظیمات شما دارای یک مقدار پیش فرض باشد (با به کارگیری مشخصه ی android:defaultValue در فایل xml ) ، بعد از آن سیستم متد onGetDefaultValue رو به منظور بازیابی این مقدار،  زمانی که  آبجکتی از کلاس  مذکور را  نمونه سازی می کند صدا می زند. شما باید این متد رو برای اینکه سیستم مقدار پیش فرض را در SharedPreferences ذخیره کند ایمپلمنت (پیاده سازی)کنید. برای مثال:


    @Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInteger(index, DEFAULT_VALUE);
}

The method arguments provide everything you need: the array of attributes and the index position of the android:defaultValue, which you must retrieve. The reason you must implement this method to extract the default value from the attribute is because you must specify a local default value for the attribute in case the value is undefined.

آرگومان های این متد هر چیزی که شما نیاز دارید را فراهم می کنند: آرایه ای از attributes (ویژگی ها) و موقعیت اندکسی android:defaultValue که شما باید آنها را بازیابی کنید . دلیلی که شما باید این متد را برای استخراج مقدار پیش فرض از attributes اجر کنید این است که شما بایستی یک متغیر لوکال یا محلی پیشفرض برای این attribute در مواردی که مقداری برای آن تعریف نشده مشخص کنید.


حالا شاید ترجمه من چنگی به دل نزنه ولی کمک میکنه متن اصلی رو بهتر در ذهن حلاجی کنید ، این توضیحات مربوط به مستندات و اینای گوگله

این متد برای دریافت مقدار پیش فرض ذخیره شده در xml مربوط به کلاس ماست؟ برای قرار دادن یه مقدار پیش فرضه ؟ ، برای زمانیه که چیزی در preference ذخیره نشده؟ یا باید همرا متد onSetInitialValue به کار بره؟ برای چیه؟کی کاربرد داره؟چه طور باید ازش استفاده کرد؟ پارامترهایی که دریافت میکنه برای چیه؟


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