我有一个AppBarLayout定义为
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
但是,有时我会更改应用程序的主题,我也想更改它和它的子项。这样做我获得了部分成功:
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar_layout);
appBarLayout.getContext().setTheme(R.style.AppTheme_Dark_AppBarOverlay);
appBarLayout.invalidate();
但是,标题的TextView没有获得主题设置。
我该如何设置?
答案 0 :(得分:1)
来自documentation for Context.setTheme():
为此上下文设置基本主题。请注意,这应该被调用 在上下文中实例化任何视图之前(例如之前) 调用setContentView(View)或inflate(int,ViewGroup))。
底线是在Context
上设置主题会影响稍后创建的视图。这意味着您必须在setTheme()
之后重建布局。
答案 1 :(得分:0)
解决这个问题的方法是使用一个ViewStub(http://developer.android.com/reference/android/view/ViewStub.html),它有两个版本的AppBarLayout:Light and Dark。
然后在onCreate
中,我检查了正在加载的主题,并用正确的R.layout
替换了ViewStub。我不知道为什么这么难,或者为什么当你改变整个Activity的主题时你不能改变子视图的'主题',这真的很令人困惑。
无论如何,这是唯一对我有用的解决方案。