方向更改会增加TextView的文本大小

时间:2014-04-08 11:23:42

标签: android sharedpreferences textview text-size

我希望将当前文字大小保存为SharedPreferences,并在屏幕方向更改时将其设置回来。

我使用此代码,但是当我更改屏幕方向时,它会使textSize更大......

package com.example.zz;

import android.app.ActionBar;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends Activity {
    TextView text;
    float size;
    ActionBar actionBar;
    private final String TEXT_SIZE = "textsize";
    final String MyPref = "preference";
    SharedPreferences settings;
    Editor editor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (TextView) findViewById(R.id.textView1);

        settings = this.getSharedPreferences(MyPref, 0);
        text.setTextSize(settings.getFloat(TEXT_SIZE, 0));
        editor = settings.edit();
    }

    public void sizeUp(MenuItem item) {
        size = text.getTextSize();
        text.setTextSize(TypedValue.COMPLEX_UNIT_PX, (float) (size + 5));

    }

    public void sizeDown(MenuItem item) {
        size = text.getTextSize();
        text.setTextSize(TypedValue.COMPLEX_UNIT_PX, (float) (size - 5));

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.actionbar, menu);
        return true;
    }

    @Override
    protected void onStop() {
        super.onStop();

        SharedPreferences.Editor editor = settings.edit();
        editor.putFloat(TEXT_SIZE, text.getTextSize());

        editor.commit();
    }

}

感谢。

5 个答案:

答案 0 :(得分:2)

方法getTextSize()像素返回文字大小,但setTextSize() sp 为单位处理大小。这就是为什么你的文字看起来更大。您应该在使用setTextSize()之前缩放尺寸。你可以这样做:

SharedPreferences.Editor editor = settings.edit();
editor.putFloat(TEXT_SIZE, text.getTextSize()/getResources().getDisplayMetrics().scaledDensity); // put text size in sp
editor.commit();

答案 1 :(得分:0)

我在这段代码中找到了onConfigure change方法,

您必须实现此方法,并在此方法中更改文本大小。

    @Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    super.onConfigurationChanged(newConfig);
    }

答案 2 :(得分:0)

试试这个:

@Override
    protected void onStop() {
        super.onStop();

        SharedPreferences settings = getSharedPreferences(MyPref, 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putFloat(TEXT_SIZE, text.getTextSize());

        editor.commit();
    }

答案 3 :(得分:0)

不是通过代码执行此操作,而是可以使用样式。

首先,在TextView中设置styles.xml的样式,其中所需的文字大小为纵向模式。例如:

<style name="MyTextView">
   <item name="android:textSize">18sp</item>
</style>

然后,在values-land文件夹中创建一个文件夹res,并将styles.xml文件放在此文件夹中,并创建一个名称相同但文本大小不同的样式: / p>

<style name="MyTextView">
   <item name="android:textSize">24sp</item>
</style>

最后,将此样式应用于布局中的TextView,文字大小将根据手机方向自动更改。额外的好处是,通过这种方式维护/改变视图的外观非常容易。

编辑:将dp中的textsize更改为sp

答案 4 :(得分:0)

试试这个:

  @Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    if (picUri != null) {
    // here you store string    
        outState.putString("cameraImageUri", picUri.toString());


    }


}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState.containsKey("cameraImageUri")) {
           // here you get string again
        picUri = Uri.parse(savedInstanceState.getString("cameraImageUri"));
    }


}