我必須使用動作條,我在那裏處理方向更改自己的應用程序:動作條容量/溢出不改變的方向變化
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
...和菜單應該適合在動作條無溢出景觀,但沒有人像:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="@string/Game" android:id="@+id/game" android:icon="@android:drawable/ic_menu_manage" android:showAsAction="ifRoom|withText"/>
<item android:title="@string/Type" android:id="@+id/type" android:icon="@android:drawable/ic_menu_edit" android:showAsAction="ifRoom|withText"/>
<item android:title="@string/Other" android:id="@+id/other" android:icon="@android:drawable/ic_menu_gallery" android:showAsAction="ifRoom|withText"/>
<item android:title="@string/Solve" android:id="@+id/solve" android:icon="@android:drawable/ic_menu_directions" android:showAsAction="ifRoom|withText"/>
<item android:title="@string/Help" android:id="@+id/help" android:icon="@android:drawable/ic_menu_help" android:showAsAction="ifRoom"/>
</menu>
在啓動時,該工作正常:
景觀:
肖像: (是的,我可能會迫使所有的項目都始終顯示,他們會適應,如下圖所示,但可能會在一個較小的平板電腦打破)
當模擬器改變方向,ActionBar的能力似乎並沒有改變: (這是確定的,但不一致)
蘭:
人像,當我開始景觀dscape,當我開始肖像時: 這看起來很傻,是我想解決這個問題的原因。
我加入這個電話轉給invalidateOptionsMenu(),但它並不能幫助:
@Override
public void onConfigurationChanged(Configuration newConfig)
{
maybeMoveSomeViewsAround(newConfig);
super.onConfigurationChanged(newConfig);
invalidateOptionsMenu();
}
(實際上我把它通過向後兼容反映,但調試器告訴我,這真的是所謂的和不會遇到()例外。)
invalidateOptionsMenu()實際上在返回之前最終調用onCreateOptionsMenu()(它重新膨脹菜單),並且我可以在後面看到getResources()。getConfiguration()。orientation已經改變。所以這真的令人費解。如果正在重新創建選項菜單,當方向改變時,它必須是ActionBar本身緩存的寬度?
有沒有辦法重新創建ActionBar而不破壞/創建活動?(因爲後者在我的情況下有點貴)
編輯:這是minimal sample project顯示的問題。
編輯2:我曾經想過檢查屏幕寬度並以編程方式調整showAsAction標誌總是和從不適當的,但這需要知道(或猜測)每個項目的寬度。 ActionBar's public API在這一點上沒有幫助我。
您可以創建和發佈一個完整的示例項目演示問題?另外,你有沒有在硬件上嘗試過?這可能是一個模擬器特定的問題。 – CommonsWare
@CommonsWare好的,請參閱我的編輯樣本項目的結尾。我目前沒有平板電腦硬件,但週三將參加關於平板電腦的Android開發者實驗室活動,所以我可以推測在那裏嘗試。 –
我可以在運行Android 3.2的XOOM上重現問題。這感覺就像一個錯誤。我已經提出並提出了一個問題:http://code.google.com/p/android/issues/detail?id=20493 – CommonsWare