方向更改会增加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的文本大小的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Fragment 的 onCreateView 方法中更改 TextView 的文本