2011-07-15 174 views
3

我給android:configChanges="orientation|keyboard"我清單中的活動,當我旋轉我的設備時,總是調用onConfigurationChanged。沒問題。Android旋轉問題與onConfigurationChanged

我想要的是當設備旋轉時,小部件的字體大小發生變化。

<TextView android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="@dimen/my_font_size" /> 

上面一樣,textSize屬性在資源 參考值和XML文件定義my_font_size在值土地,值端口的文件夾。

好的。我準備好了。建立它,運行它,並旋轉設備,並沒有改變。 onConfigurationChanged()中的requestLayout()不起作用。 有任何建議嗎?

謝謝。

+0

可以張貼代碼onConfigurationChanged() – Kenny

回答

0

如果您在活動中指定了android:configChanges="orientation|keyboard",則Android不會爲您處理此更改(意思是它不會使用適當的資源文件重新創建您的活動)。這就是爲什麼你不能改變字體大小。如果你想讓Android處理這個問題,那麼不要將configChanges添加到你的Manifest中的Activity中。

4

除非其絕對必要(此屬性被引入以啓用一些對性能敏感的方案),否則不應使用configChanges屬性。請仔細閱讀Handling Runtime [Congiuration] Changes

這種技術[使用configChanges]應被視爲最後的手段,不建議用於大多數應用。


已經警告過你,這裏是解釋爲什麼旋轉設備時,你看不到的變化。

  • 如果沒有您的活動使用configChanges="orientation",你的活動被破壞,與新方向資源重建。在這種情況下,您在onCreate()中的代碼將自動從正確的資源中選取值(*-land*-port)。

  • 如果您確實使用configChanges="orientation",您主要向Android表示不會自動應用更改,您將自己在中執行此操作。

假設你真的需要保留configChanges,這裏是你可以做什麼來解決問題字體大小:

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{  
    super.onConfigurationChanged(newConfig); 

    int fontSize = getResources().get(R.id.font_size);  
    mTextView.setTextSize(fontSize); 
} 

但同樣,你真的不應該使用在大多數情況下configChanges

+0

謝謝您。這非常解釋 – milosmns

0

實際上,您可以爲兩種佈局類型指定兩個不同的佈局文件,並根據需要配置每個佈局文件。

有些文檔:Application Resources

如果你想要在你的重寫方法的使用,使基於方向化妝設計變更,也可能是首選的方法