正如其他人指出,你應該保存和恢復實例狀態,而不是處理配置cha如果可能的話,請儘量自己。如果您有充分的理由不這樣做,您可以嘗試在配置更改後更新工具欄的高度和文本外觀。
以下代碼應該適用於支持庫版本Toolbar
。支持庫提供屬性actionBarSize
,titleTextAppearance
和subtitleTextAppearance
。
該代碼假定您擁有在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();
}
是的,但我需要保留我的內容..我該怎麼辦? –
你保存的內容是什麼?你應該使用onSaveInstanceState() –
http://developer.android.com/training/basics/activity-lifecycle/recreating.html#SaveState檢查這個鏈接 –