在我的应用程序清单中,我添加 android:configChanges 以防止活动重新加载/重新启动
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden|screenSize" >
它可以工作,但是supportActionBar(我正在使用AppCompat)以较小的字体大小保留他的高度。
ActionBar应该在纵向上更大,在横向上更小,但它保持初始值:
删除 android:configChanges =“orientation | keyboardHidden | screenSize”是我找到的唯一解决方案,但是应用程序在旋转时重新启动,我需要保留应用程序内容
答案 0 :(得分:2)
设置android:configChanges="orientation|keyboardHidden|screenSize"
您声明您将自己处理这些配置更改。在正常情况下,您不应该设置它,并让Android重新创建您的活动。
编辑:
如果您想保留android:configChanges
行,则必须覆盖onConfigChanged()
并更改自己需要的所有内容,例如ActionBar / ToolBar的大小。
答案 1 :(得分:1)
正如其他人指出的那样,您应该保存并恢复实例状态,而不是自己处理配置更改。如果您有充分的理由不这样做,可以尝试在配置更改后更新工具栏的高度和文本外观。
以下代码适用于Toolbar
的支持库版本。属性actionBarSize
,titleTextAppearance
和subtitleTextAppearance
由支持库提供。
代码假定您在appToolbarStyle
中声明了自定义属性attrs.xml
。如果您不需要,可以调整代码直接使用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();
}
答案 2 :(得分: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>