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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方向更改会增加TextView的文本大小相关的知识,希望对你有一定的参考价值。

我想用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();
    }

}

谢谢。

答案

方法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();
另一答案

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

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

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

试试这个:

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

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

        editor.commit();
    }
另一答案

试试这个 :

  @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"));
    }


}
另一答案

您可以使用样式来代替通过代码执行此操作。

首先,在qazxsw poi中设置qazxsw poi的样式,使用所需的纵向模式文本大小。例如:

TextView

然后,在styles.xml文件夹中创建一个文件夹<style name="MyTextView"> <item name="android:textSize">18sp</item> </style> ,并将values-land文件放在此文件夹中,并创建一个名称相同但文本大小不同的样式:

res

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

编辑:将dp中的文本大小更改为sp

以上是关于方向更改会增加TextView的文本大小的主要内容,如果未能解决你的问题,请参考以下文章

更改 TextView 的画布大小

什么是 textview.setTextSize()?

无法在 Fragment 的 onCreateView 方法中更改 TextView 的文本

为文本大小更新高度 UITextView

如何根据加载的文本增加我的android textview中的文本大小?

更改 Widget 应用程序的文本大小