我希望将当前文字大小保存为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();
}
}
感谢。
答案 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"));
}
}