0

这是我的代码(已编辑):

公共类主要扩展活动
{

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 需要更改其文本样式。之前的问题重新启动应用程序生效复选框首选项现在不需要了。但问题是,当我取消选中复选框首选项时,它不会进入默认状态。是吗?任何人都可以帮助我代码中有什么问题吗?

4

2 回答 2

1

尝试调用 txt.requestLayout()。这将重新绘制视图。

于 2012-02-09T06:58:15.403 回答
1

我认为您正在使用首选项来更改字体?

您选中一个框并期望字体会根据是否选中而改变?

当您在更改首选项后返回活动时,这不会导致您的 onCreate() 方法运行,因为活动已经存在于您的后台堆栈中并且只是重新显示。

您应该将字体更改代码放在 onResume() 方法中或使用 startActivityForResult 方法并在那里处理首选项的关闭。

更新:

if (first) {
     txt.setTypeface(Typeface.MONOSPACE);
} else {
     txt.setTypeface(Typeface.SERIF);
}
于 2012-02-09T07:37:33.810 回答