这是我的代码(已编辑):
公共类Main扩展活动
{
TextView txt;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b=(Button) findViewById(R.id.button1);
txt = (TextView) findViewById(R.id.textView1);
b.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
Intent intent= new Intent(Main.this,Preference.class);
startActivity(intent);
}
});
}
public void onResume()
{
super.onResume();
Toast.makeText(this, "onResume", Toast.LENGTH_LONG).show();
SharedPreferences myPreference=PreferenceManager.getDefaultSharedPreferences(this);
boolean first=myPreference.getBoolean("first", true);
if(first)
{
Typeface font=Typeface.MONOSPACE;
txt.setTypeface(font);
}
}
}
在main.xml中,这里有一个需要更改其文本样式的textview。以前的问题重新启动应用程序以使其生效复选框首选项现在不需要了。但问题是,当我取消选中复选框首选项时,它不会变为默认状态。是吗?有人能帮我代码出了什么问题吗?
我认为您正在使用首选项来更改字体?
您选中了一个框,并期望字体根据是否选中而更改?
当您在更改首选项后返回到活动时,这不会导致onCreate()方法运行,因为该活动已经存在于您的后堆栈中,并且只是重新显示。
您应该将字体更改代码放在onResume()方法中,或者使用startActivityForResult方法并在那里处理首选项的关闭。
更新:
if (first) {
txt.setTypeface(Typeface.MONOSPACE);
} else {
txt.setTypeface(Typeface.SERIF);
}
尝试调用txt.requestLayout()。这将重新绘制视图。