2015-09-07 30 views
6

在我的應用程序清單,我已經添加Android的調整:configChanges,以防止在旋轉Android的 - 動作條不onConfigurationChanged(程序兼容性)

<activity 
    android:name=".MainActivity" 
    android:label="@string/app_name" 
    android:configChanges="orientation|keyboardHidden|screenSize" > 

它的工作原理,但supportActionBar活動重裝/重啓(我使用AppCompat)以小字體保留他的身高。

動作條應該是橫向縱向越做越小,但它保持初始值:

  • ,如果我在的風景開始,在動作條保持苗條的肖像
  • 如果我在縱向展開,動作條留在景觀

刪除機器人大:configChanges =「方向| keyboardHidden |屏幕尺寸」是我發現的唯一的解決辦法,但在旋轉的應用程序重新啓動,我需要preser已經應用內容

人像開始 enter image description here

開始在景觀 enter image description here

景觀啓動和旋轉屏幕爲縱向(小操作欄和小字體高度) enter image description here

回答

2

通過設置android:configChanges="orientation|keyboardHidden|screenSize"

您聲明您將自行處理這些配置更改。在正常情況下,你不應該設置,並讓Android重新創建你的活動。

編輯:

如果你想保持線android:configChanges,你必須覆蓋onConfigChanged()和改變自己,例如需要的一切ActionBar/ToolBar的大小。

+0

是的,但我需要保留我的內容..我該怎麼辦? –

+1

你保存的內容是什麼?你應該使用onSaveInstanceState() –

+0

http://developer.android.com/training/basics/activity-lifecycle/recreating.html#SaveState檢查這個鏈接 –

0

如果你想保持android:configChanges,你可以用它來強制56dp工具欄的高度,對準圖標和修復小文的問題:

工具欄XML:

<android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:minHeight="56dp" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" 
     app:titleTextAppearance="@style/titleTextAppearance" /> 

樣式XML:

<style name="titleTextAppearance" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title"> 
    <item name="android:textSize">20sp</item> 
</style> 
+0

要小心,sw600dp的默認值應該是'64dp' – 0101100101

0

正如其他人指出,你應該保存和恢復實例狀態,而不是處理配置cha如果可能的話,請儘量自己。如果您有充分的理由不這樣做,您可以嘗試在配置更改後更新工具欄的高度和文本外觀。

以下代碼應該適用於支持庫版本Toolbar。支持庫提供屬性actionBarSizetitleTextAppearancesubtitleTextAppearance

該代碼假定您擁有在attrs.xml中聲明的自定義屬性appToolbarStyle。如果你不需要,你可以直接使用R.style.Widget_AppCompat_Toolbar

import android.support.v7.widget.Toolbar; 

... 

private Toolbar toolbar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main_activity); 

    toolbar = findViewById(R.id.toolbar); 
} 

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

    updateToolbar(); 
} 

private void updateToolbar() { 
    if (toolbar == null) 
     return; 

    final Context context = toolbar.getContext(); 

    int[] attr = new int[] { R.attr.actionBarSize, R.attr.appToolbarStyle }; 
    int idxActionBarSize = 0; 
    int idxAppToolbarStyle = 1; 
    TypedArray a = context.obtainStyledAttributes(attr); 
    int actionBarSize = a.getDimensionPixelSize(idxActionBarSize, 0); 
    int appToolbarStyle = a.getResourceId(idxAppToolbarStyle, R.style.Widget_AppCompat_Toolbar); 
    a.recycle(); 

    if (actionBarSize != 0) { 
     ViewGroup.LayoutParams layoutParams = toolbar.getLayoutParams(); 
     if (layoutParams != null) { 
      layoutParams.height = actionBarSize; 
     } 

     toolbar.setMinimumHeight(actionBarSize); 
    } 

    attr = new int[] { R.attr.titleTextAppearance, R.attr.subtitleTextAppearance }; 
    int idxTitleTextAppearance = 0; 
    int idxSubtitleTextAppearance = 1; 
    a = context.obtainStyledAttributes(appToolbarStyle, attr); 
    int titleTextAppearance = a.getResourceId(idxTitleTextAppearance, 0); 
    int subtitleTextAppearance = a.getResourceId(idxSubtitleTextAppearance, 0); 
    a.recycle(); 

    if (titleTextAppearance != 0) { 
     toolbar.setTitleTextAppearance(context, titleTextAppearance); 
    } 

    if (subtitleTextAppearance != 0) { 
     toolbar.setSubtitleTextAppearance(context, subtitleTextAppearance); 
    } 

    toolbar.requestLayout(); 
}