PDA

View Full Version : ساخت تنظیمات



amircrdsa7
دوشنبه 07 مهر 1393, 20:28 عصر
آقا یکی کمک کنه خواهشا

من میخوام یه لایوت بسازم که توش تنظیمات فونت باشه بعدش نمیدونم کد اکتیویتیش رو چی بذارم که تو همه صفحات این تنظیمات اجرا بشه . از Shared Preferences استفاده کردم ولی فقط تغییرات تو همون صفحه ذخیره میشه ولی من میخوام همه صفحات تغییر کنند . باید چیکار کنم ؟

mojniknam
دوشنبه 07 مهر 1393, 22:30 عصر
یعنی برنامه نویست اینجوری بوده که همه text view ها سایز رو از shared p میخونه ولی در عمل فقط توی یکی از اکتیویتی هات اعمال میشه میشه؟

morahimi
دوشنبه 15 دی 1393, 12:55 عصر
من همین مشکل رو دارم ولی از sharedاستفاده نکردم میشه راهنکایی کنید چطوری از shared استفاده کنم؟

gilas1368
دوشنبه 15 دی 1393, 13:05 عصر
شما باید برای تکست ویوهاتون خاصیت فونت رو ست کنین
و بهش بگین فونتش رو باید از این آدرس ک توی فایل assets هست و با نامی ک توی sherad ذخیره کردین بخونه

حالا تمامی تکست باکس هایی ک براشون فونت رو ست کردین میان و با توجه ب اسم فونتی ک ذخیره کردین، فونت مورد نظر رو از پوشه assets (در صورت وجود) میخونن و فونت رو باری تکستشون ست میکنن

morahimi
دوشنبه 15 دی 1393, 13:25 عصر
سلام من این کدها رو توی صفحه ی متن نوشتم که مقدار textsize رو از کلاس prefs بگیر و اندازه تکست ویو رو طبق اون تنظیم کن ولی وقتی برنامه رو اجرا می کنم برنامه رو می بنده

SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
int fontSize = shared.getInt("textsize", 18);
tv.setTextSize(fontSize);

amin_nez
دوشنبه 15 دی 1393, 18:50 عصر
چیزی که من هم واسه تغییر فونت و سایز فونت استفاده میکنم اینه:

package com.persianfal.hindi;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.TextView;

public class MyTextView extends TextView {

public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}

public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}

public MyTextView(Context context) {
super(context);
init(context);
}

private void init(Context context) {
if (!isInEditMode()) {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "traffic.ttf");
setTypeface(tf);
SharedPreferences settings=context.getSharedPreferences("settings", Context.MODE_PRIVATE);
int fontsize=settings.getInt("fontsize", 18);
setTextSize(TypedValue.COMPLEX_UNIT_SP, fontsize);
}
}

}



این کلاس تکست ویو رو اکستند میکنه و فونت و سایزش رو به طور پیش فرض میذاره (سایز هم از shared میگیره)
توی هر اکتیویتی که تکست ویو میذاری بجای TextView این رو میذاریم (از قسمت Custom Views هم در دسترس میشه)

<com.persianfal.hindi.MyTextView
android:id="@+id/myTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />

amin_nez
دوشنبه 15 دی 1393, 18:53 عصر
سلام من این کدها رو توی صفحه ی متن نوشتم که مقدار textsize رو از کلاس prefs بگیر و اندازه تکست ویو رو طبق اون تنظیم کن ولی وقتی برنامه رو اجرا می کنم برنامه رو می بنده

SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
int fontSize = shared.getInt("textsize", 18);
tv.setTextSize(fontSize);

اگه کدهای بالا به کارتون نمیاد سایز tv رو اینجوری تغییر بدید

tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSize);

omid_cr77
سه شنبه 16 دی 1393, 03:17 صبح
از دیتابیس خارجی یا داخلی استفاده کن.مقداراتو از تنظیمات بریز داخل دیتابیس اینجوری میتونی تو همه ی لایوت ها set کنی.هر جا میخوای تنظیمات استفاده کنی از دیتابیس بخون

morahimi
سه شنبه 16 دی 1393, 20:26 عصر
سلام من با shared p این کار رو کردم ولی نمدونم چرا مقدار وارد شده در تنظیمات رو معادل سایز قرار نمیده گاهی مقدار پیش فرض کلاس prefs رو به عنوان سایز متن و گاهی مقدار پیش فرض موجود در کلاس اکتیویتی متن رو به عنوان سایز متن قرار میده و سایز متن رو طبق اون تنظیم میکنه
این کد دکمه ذخیره سازی تنظیمات در صفحه تنظیمات هست اون تکه ای که سبز کردم مربوط به ذخیره سازی در shared p هست

btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (Integer.parseInt(et.getText().toString()) <= 10
|| Integer.parseInt(et.getText().toString()) > 30) {
Toast.makeText(getApplicationContext(),
"اندازه قلم بايد عددي بين 10 تا 30 باشد",
Toast.LENGTH_SHORT).show();
} else {
SharedPreferences.Editor shpE = sh.edit();

shpE.putString("font", Integer.toString(spinner1
.getSelectedItemPosition()));
shpE.putString("size", et.getText().toString());
shpE.putString("color", Integer.toString(spinner2
.getSelectedItemPosition()));
shpE.commit();
finish();
Toast.makeText(getApplicationContext(),
"تغييرات با موفقيت ذخيره شد", Toast.LENGTH_LONG)
.show();
SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
editor.putInt("textsize", si);
editor.apply();


}

}
اینم کدهای کلاس prefs هست


import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class Prefs extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this );

int myInt = prefs.getInt("textsize" , 11);
Boolean myBoolean = prefs.getBoolean("myBooleanName", true);
}
}
اینم کدهای کلاس اکتیویتی متن


import android.app.ActionBar;
import android.app.Activity;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Menu;
import android.widget.TextView;

public class Dar extends Activity {
@Override
public void onCreate(Bundle savedInstancestate) {
super.onCreate(savedInstancestate);
setContentView(R.layout.dar);

TextView tv =(TextView)findViewById(R.id.textView1);

ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#59D659")));

SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
int a = shared.getInt("textsize", 20);
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, a);



کجای کدها اشکال داره خودم که هیچ اشکالی نمی بینم چه کنم ؟ لطفا کمک کنید

morahimi
چهارشنبه 17 دی 1393, 08:24 صبح
ببخشید کد ذخیره تنظیمات رو باید کجای کلاس تنظیمات قرار بدم؟؟؟؟

mohammad-de
چهارشنبه 17 دی 1393, 11:20 صبح
چیزی که من هم واسه تغییر فونت و سایز فونت استفاده میکنم اینه:

package com.persianfal.hindi;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.TextView;

public class MyTextView extends TextView {

public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}

public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}

public MyTextView(Context context) {
super(context);
init(context);
}

private void init(Context context) {
if (!isInEditMode()) {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "traffic.ttf");
setTypeface(tf);
SharedPreferences settings=context.getSharedPreferences("settings", Context.MODE_PRIVATE);
int fontsize=settings.getInt("fontsize", 18);
setTextSize(TypedValue.COMPLEX_UNIT_SP, fontsize);
}
}

}



این کلاس تکست ویو رو اکستند میکنه و فونت و سایزش رو به طور پیش فرض میذاره (سایز هم از shared میگیره)
توی هر اکتیویتی که تکست ویو میذاری بجای TextView این رو میذاریم (از قسمت Custom Views هم در دسترس میشه)

<com.persianfal.hindi.MyTextView
android:id="@+id/myTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />

عزیز من یه کدی تغریبا مشابه همین برای تغیر رنگ و فونت و سایز متن دارم ولی وقتی متون طولانی بشن اسکرول کردن تکست ها خیلی کند میشه و تیک میزنه
شما راه حلی بره این مشکل دارید؟

amin_nez
چهارشنبه 17 دی 1393, 11:42 صبح
عزیز من یه کدی تغریبا مشابه همین برای تغیر رنگ و فونت و سایز متن دارم ولی وقتی متون طولانی بشن اسکرول کردن تکست ها خیلی کند میشه و تیک میزنه
شما راه حلی بره این مشکل دارید؟

مشکل از جای دیگه است! وگرنه متنهای من هم خیلی طولانی هستند.

morahimi
چهارشنبه 17 دی 1393, 12:10 عصر
ببخشید کد ذخیره تنظیمات رو باید کجای کلاس تنظیمات قرار بدم؟؟؟؟