2012-02-09 71 views
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的其文本樣式需要更改。現在不需要重新啓動應用程序生效複選框首選項的上一個問題。但問題是,當我取消選中複選框偏好它不會進入其默認狀態。是嗎?任何人都可以幫我在代碼中弄錯什麼?

回答

1

我認爲你正在使用的喜好來改變字體?

您選中了一個框並希望字體根據是否被選中來更改?

當您在更改首選項後返回到您的活動時,這不會導致您的onCreate()方法運行,因爲該活動已存在於您的後退堆棧中,並且正在重新顯示。

您應該將字體更改代碼放在onResume()方法中或使用startActivityForResult方法並處理其中的偏好設置。

更新:

if (first) { 
    txt.setTypeface(Typeface.MONOSPACE); 
} else { 
    txt.setTypeface(Typeface.SERIF); 
} 
1

嘗試調用txt.requestLayout()。這將重新繪製視圖。

+0

我已經包括它的代碼。 – Tejaswini 2012-02-09 07:04:02

+0

看到更新的響應 – 2012-02-09 07:16:05

+0

嘗試txt.requestLayout但仍然輸出相同。 – Tejaswini 2012-02-09 07:37:10