滑动条改变文本大小

4

我想使用拖动条更改编辑框的文本大小。每次我关闭并重新打开活动时,拖动条会自动增加文本大小。以下是代码:

package com.e_orthodoxy.orthodox_prayers;
    
public class WakeupActivity extends Activity {

    private SharedPreferences prefs;
    private SeekBar seekbar;
    private EditText edittext;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wakeup);
        
        seekbar = (SeekBar) findViewById(R.id.seekBar1);
        edittext = (EditText) findViewById(R.id.id_wakeup_txt);
        
        prefs = getPreferences(MODE_PRIVATE);
        
        float fs = prefs.getFloat("fontsize", 12);
        seekbar.setProgress((int)fs);
        edittext.setTextSize(seekbar.getProgress());
        

        seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            
            @Override
            public void onStopTrackingTouch(SeekBar seekBar){
                prefs = getPreferences(MODE_PRIVATE);
                SharedPreferences.Editor ed = prefs.edit();
                ed.putFloat("fontsize", edittext.getTextSize());
                ed.commit();    
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar){
                
            }
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser){
                edittext.setTextSize(progress);
            }
        });
        
        
    }
    
    
    @Override
    public void onBackPressed() {
        
        Intent intent_wakeup_back = new Intent (WakeupActivity.this, DailyPrayersActivity.class);
        startActivity(intent_wakeup_back);
        finish();
    }   
}

所以你想让进度条在每次重新打开活动时都从12(默认值)开始?在这种情况下,不要在onStopTrackingTouch中提交新的字体大小,因为这会将字体大小的最后一个值保存在应用程序的缓存中。 - moh.sukhni
不,我希望进度条从用户保存的大小开始。 - BasILyoS
请阅读来自Android开发者的以下内容:http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28float%29,文本大小是基于缩放像素计算的,为解决此问题,请使用像素设置文本大小(TypedValue.COMPLEX_UNIT_PX),您的代码将是:edittext.setTextSize(TypedValue.COMPLEX_UNIT_PX,seekbar.getProgress()); 我会将此作为答案添加。 - moh.sukhni
2个回答

12

将setTextSize(float size)替换为setTextSize(int unit,float size),并使用TypedValue.COMPLEX_UNIT_PX作为单位。

float fs = prefs.getFloat("fontsize", 12);
seekbar.setProgress((int)fs);
//edittext.setTextSize(seekbar.getProgress());
edittext.setTextSize(TypedValue.COMPLEX_UNIT_PX,seekbar.getProgress());

不要忘记 onProgressChanged

 //edittext.setTextSize(progress);
 edittext.setTextSize(TypedValue.COMPLEX_UNIT_PX,progress);

-2

所有的代码都写在你的onCreate()方法中,并遵循类型转换(TextView和SeekBar):

SeekBar seekBar =(SeekBar)findViewById(R.id.seekbar);
        SharedPreferences prefs = getPreferences(MODE_PRIVATE);

float fs = prefs.getFloat("fontsize", 12);
seekBar.setProgress((int)fs);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,seekBar.getProgress());

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
        textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,seekBar.getProgress());
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        SharedPreferences prefs = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor ed = prefs.edit();
        ed.putFloat("fontsize", textView.getTextSize());
        ed.commit();
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接