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

دکمه بزرگنمایی zoom

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

سلام

من می خوام یه دکمه بزرگ نمایی برای متن ها بذارم تا  کاربر به دلخواه خودش متن رو تا یک سایزی بزرگ یا کوچیک کنه؟

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

نظرات

Mir Unknown 12 سال پیش
یا از وب ویو استفاده کن یا قابلیت تغیر اندازه فونت رو بزار تو برنامت که هر دوتا کار های ساده ای هستند

پاسخ‌ها 3

CreativeBoy 12 سال پیش

سلام

میتونی طبق آموزش های custom control برای خودت یک کنترل سفارشی بسازی ولی فعلا این کدها میتونه کمکت کنه:

کدهای مربوط به اکتیویتی:

final TextView txt1 = (TextView) findViewById(R.id.txt1);
SeekBar seekBar1 = (SeekBar) findViewById(R.id.seekBar1);

seekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {}


    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {}


    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(txt1.getTextSize() < 10){
txt1.setTextSize(10 / 1.5f);
}

/**
* progress * 1.33 for ldpi - progress * 1 for mdpi
* progress / 1.5 for hdpi - progress / 2 for xhdpi
*/
txt1.setTextSize(progress / 1.5f); txt1.setText("text size is : " + txt1.getTextSize()); } });

کدهای XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <TextView
        android:id="@+id/txt1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginBottom="8dip"
        android:layout_marginTop="8dip"
        android:text="There is some text" />



    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="4dip" />

</LinearLayout>

 

نظرات

ho_ghorbani 12 سال پیش
دوست گلم CreativeBoy ممنون اما چطوری میشه محدود کنم بزرگنمایی رو
sadeghbarout 12 سال پیش
مقدار progress بین 1-100 اگه اشتباه نکنم. حالا شما با یه نسبت ساده اینو به هر اندازه ای که میخوای تبدیل کن و بعد ست کن
Spirit 12 سال پیش
البته با متد setMax میشه حداکثرش رومشخص کرد
sadeghbarout 12 سال پیش
آره این راه بهتره ممنون :)
Mir Unknown 12 سال پیش
اقا setMax واس حداکثر،واس حداقل چیه؟!
sadeghbarout 12 سال پیش
progress رو با عدد حداقل جمع کن
Mir Unknown 12 سال پیش
نگرفتم!اگه میشه بیشتر روشنگری کن!
CreativeBoy 12 سال پیش
پاسخ ویرایش شد. مقدار progress بین 0 تا 100 هست.
CreativeBoy 12 سال پیش
یادم رفت بگم، توجه کنید که progress رو اگر همین طوری خام بذاریم واسه textSize بر حسب dip محاسبه میشه که کمی بزرگتر از px هست، پس اگر قصد داشته باشید که textSize برحسب px نمایش داده بشه باید به 1.5 تقسیم بشه. به این لینک هم یک نگاه بندازید.
Mir Unknown 12 سال پیش
صادق که افلاین شد!CreativeBoy شما بگید واس دادن حداقل به progress چکار کنم؟!وا اندازه فونت برنامه لازم دارم تا نشه فونت رو کوچیکتر از 10 کرد
CreativeBoy 12 سال پیش
Mir Unknown عزیز، پاسخ باز هم ویرایش شد، فکر کنم الان جوابتونو بگیرید. یک شرط گذاشتم که اگه فونت کوچکتر از 10 شد باز سایز فونت همون 10 بمونه.
Mir Unknown 12 سال پیش
فکر میکردم واس حداقل هم متد هستش،خودمم همین کارو انجام دادم
sadeghbarout 12 سال پیش
این راهم خوبه ولی منظور من این بود که مثلا میخوایم فونت بین 10-30 باشه . خب max رو میذاریم رو 20 بعد هرعددی که کاربر انتخاب کرد با حداقل که همون 10 جمع میکنیم. اینجوری همیشه عدد بین 10-30 میشه ;)
Mir Unknown 12 سال پیش
یعنی کاربر اگه انتخاب کرد 5 میشه 15؟! راهی نیست ک خود seekbar پاینترینش 10 باشه؟ک نیاز به شرط و جمع نباشه؟مثل همون متد max؟
CreativeBoy 12 سال پیش
صادق منم اول همین راهی که گفتی به ذهنم خورد ولی چون عجله داشتم همینطور جواب دادم، راهی که گفتی بهتر و اصولی تره
sadeghbarout 12 سال پیش
@Mir Unknown : من راهی سراغ ندارم.به قول CteativeBoy این بهترین راهه. راستی ماجرای اون 3 سوالی که تو صفحه پروفایلت گذاشتی چیه؟؟؟
CreativeBoy 12 سال پیش
دوستان پاسخ باز هم ویرایش شد، :). فراموش کرده بودم که بگم برای densityDpi های مختلف مقدار بر حسب px چطور باید محاسبه بشه (توی دومین comment خودم زیر همین پاسخ منظور hdpi بود. )، الان توی comment ی که برای کدها گذاشتم میتونید توضیحات تکمیلی رو ببینید.
Mir Unknown 12 سال پیش
واس دسترسی راحتر گذاشتم :D
Eminent 12 سال پیش

دوست عزیز من الان امتحان کردم دستتون درد نکنه خوب گفتید اما منم مشکل دارم اینکه با تابع setMax سایز کران بالا رو میدیم اما مثلا من دوست دارم متن فقط حداقل سایز کران پایین 10 رو داشته باشه که نمیشه با یه شرط تا حدودی حل میکنمش مثلا به متن مقدار اولیه کران پایین رو میدم اما وقتی نوار لغزنده رو تا تکون میدم برای یه لحظه متن بسیار کوچیک میشه ک اعصابمو ریخته بهم من sample رو میذارم لطفا کمک کنید. (خلاصه حرفام : حداقل سایز مثلا 20 و حداکثر سایز 80 اما مقدار 20 مقدار 0درصد و سایز 80 مقدار 100 درصد رو برای نوار لغزنده داشته باشه ممنون)

 package ir.pourmasih.app.zoom;

import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;


public class ZoomActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final TextView txt = (TextView) findViewById(R.id.txt);
        final SeekBar skb = (SeekBar) findViewById(R.id.skb);

        skb.setMax(80);

        skb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar arg0) {}


            @Override
            public void onStartTrackingTouch(SeekBar arg0) {}


            @Override
            public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
                txt.setTextSize(80); //set text defualt size
                float s = txt.getTextSize();
                if (s >= 20 || s <= 80) { // low limite and hight limite

                    txt.setTextSize(arg1); // arg1 is progress

                    //  txt.setTextSize(txt.getTextSize());
                    //  txt.setTextSize(50 / 1.5f);
                }
            }
        });
    }
}

نظرات

Eminent 12 سال پیش
جلال خالق (باز نمیدونم از نظر املایی درست نوشتم یا نه). من همیشه فکر میکردم بچه چطور سورس رو میزارن عین سورس خود جاوا همیشه عکس میزاشتم و خوشم نمیومد الان امتحان کردم. خیلی خوشم اومد. من به استاد ایمان راسخ آوردم. در ضمن دوستان منتظر راهنماییتون هستم...
sadeghbarout 12 سال پیش
نظرات بالا رو بخون راه بهتر رو میبینی
Eminent 12 سال پیش
عزیز واقعا بابت جوابت ممنون. یعنی واقعا به نظرتون نظرات دوستان رو نخوندم که دوباره کد رو زدم و فرستادم ؟ و یا متوجه شدم و همینجوری خواسته باشم چیزی بگم!!! دوست عزیز خواهشا سوال منو یه بار دیگه بخونید و نظرات و ج دوستان رو ببینید که خودتون هم توش هستید. اگه منظورمو متوجه شدید ممنون میشم راهنمایی کنید اگه ندوستید که دیگه ارزی ندارم. تشکر
sadeghbarout 12 سال پیش

خب گفتم شاید نخوندی!

اول setMax رو به جای 80 بکن 60

بعد کدهای onProgressChanged رو اینجوری بذار:

  @Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
txt.setTextSize(arg1+20);

}

همین! (حالا واقعا تو کامنتای بالا این معلوم نبود؟ )

نظرات

Eminent 12 سال پیش
حل شد مرسی. نه معلوم نبود. ولی الان دقیقا درک کردم که جریان چیه! ممنون.

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