使用invalidate重绘不正常

时间:2012-02-07 14:31:41

标签: android eclipse

我们正在android中做聊天应用程序作为最后一年的项目和android的新功能。我希望在用户选择提供的选项时动态更改字体样式。因此使用共享偏好和无效功能来重绘GUI。以下是我的代码片段      包com.kdr.star;

 import android.app.Activity;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.graphics.Typeface;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.TextView;

 public class Main extends Activity  {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    SharedPreferences settings=PreferenceManager.getDefaultSharedPreferences(this);
    boolean first=settings.getBoolean("first", false);
    TextView txt = (TextView) findViewById(R.id.textView1);
    if(first)
 {

Typeface font=Typeface.MONOSPACE;
txt.setTypeface(font);
txt.Invalidate();
}



  Button b=(Button) findViewById(R.id.button1);
  b.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
    // TODO Auto-generated method stub
Intent intent= new Intent(Main.this,Preference.class)   ;
startActivity(intent);
}
  });
  }
  }

此代码可以部分使用。选中该复选框后,返回时该更改不会出现在该实例中。但如果应用程序关闭并再次打开,则会看到更改。但是我想在选中复选框后立即显示更改。即使invalidate函数没有帮助。有没有其他方法可以实现它。在这方面的任何指导将是非常值得注意的。提前致谢

2 个答案:

答案 0 :(得分:1)

尝试postInvalidate()not invalidate()。

不鼓励在非UI线程中使用invalidate()方法。

答案 1 :(得分:0)

由于您将无效项放在onCreate()中,我认为它不会重绘更改。
尝试将invalidate()方法放在onClickListener()中,或者创建一个新方法来刷新图像并在侦听器上调用它。