Android 将actionbar从片段内更改为覆盖
我有一个片段(片段1),它被另一个片段(片段2)替换。片段1被放置在堆栈上。我使用的是兼容模式(不是ActionBarSherlock) 这是我的问题。我希望actionbar在某些片段中显示为覆盖,但在其他片段中不显示。具体来说,当显示片段2时,我希望它显示在覆盖中,然后在片段2退出后返回到正常的操作栏 片段1有一个始终可见的常规操作栏。但是,当我用片段2替换片段1时,我需要在5秒后隐藏操作栏。如果存在触摸事件,操作栏将再次显示。这一切都很好,但是,每次隐藏或显示动作栏时,片段2都会被重新绘制。因此,我想让片段2中的actionbar显示为覆盖 我知道我可以更改actionbar覆盖,但我不知道如何从片段中以编程方式进行更改。我不想对每个片段都进行更改,只想更改片段2Android 将actionbar从片段内更改为覆盖,android,android-fragments,android-actionbar-compat,Android,Android Fragments,Android Actionbar Compat,我有一个片段(片段1),它被另一个片段(片段2)替换。片段1被放置在堆栈上。我使用的是兼容模式(不是ActionBarSherlock) 这是我的问题。我希望actionbar在某些片段中显示为覆盖,但在其他片段中不显示。具体来说,当显示片段2时,我希望它显示在覆盖中,然后在片段2退出后返回到正常的操作栏 片段1有一个始终可见的常规操作栏。但是,当我用片段2替换片段1时,我需要在5秒后隐藏操作栏。如果存在触摸事件,操作栏将再次显示。这一切都很好,但是,每次隐藏或显示动作栏时,片段2都会被重新绘制
想法?这可能不是你所希望的答案 考虑另一个问题:调用
setContentView(…)
后,我们是否可以更改活动主题?这个问题已经被问了很多次,常见的解决方案是重新创建(调用finish()
和startActivity(getIntent())
)活动,并在setContentView(…)
之前设置新主题
你的问题是对这一点的延伸——增加了从片段改变主题的复杂性。在任何情况下,我都不认为上面提到的解决方案是好的。
ActionBar是创建活动时首先要初始化的组件之一。我不认为你会找到一种方法,以某种方式“刷新”它与新的属性。请参见下面的requestFeature(Window.FEATURE\u ACTION\u BAR\u OVERLAY)
方法如何处理post-setContentView(…)调用:
因此,如果已经为该活动调用了setContentView(…)
(在您的情况下就是这样),将引发运行时异常
您甚至可能不需要此功能吗?
首先,将ActionBar设置为主题中的覆盖:
<item name="android:windowActionBarOverlay">true</item>
<!-- Support library attribute for compatibility -->
<item name="windowActionBarOverlay">true</item>
true
真的
这是我的问题。我希望actionbar在一些片段中显示为覆盖
好的。我们已经为上述内容准备好了
。。。但在其他方面则不然
假设您不想将ActionBar作为片段B中的覆盖。然后,在片段B的布局中,执行以下操作:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?android:attr/actionBarSize" > <<<-- ?attr/actionBarSize
for compatibility
....
....
</LinearLayout>
actionbar依赖于活动,而不是此解决方案可能无法使用默认actionbar您可能只需要创建自己的类似actionbar的布局,然后您就可以对其进行更多控制。如果您只是将动作栏用作标题,我建议您这样做,因为我知道动作栏依赖于活动。我使用actionbar不仅仅是为了标题栏。我想的是,是否有一种方法可以通过调用主活动来改变片段中的acionbar。问题是,我需要以编程方式这样做,因为通过主题应用更改(我认为)为时已晚?????如果我知道你想要的只是修改你片段中的动作栏,对吗?没错。我可以将项目添加到acionbar。我需要知道的是,如何将actionbar类型更改为overlay。是否切换其可见性?改变它的可见性是很容易的。但在运行时使其覆盖可能有点困难或棘手。我也使用这种方法。如果您的LinearLayout
具有自定义背景,则最好使用paddingTop
而不是marginTop
@Jelle Ah yes。你说得对。如果actionbar是(半透明的),那么使用填充的想法将最有效。但是,如果actionbar有不透明的背景/颜色,那么边距会更好——不透支。我将编辑我的答案以包含此内容。谢谢。很高兴想到透支@只是再学一次不客气。谢谢你提出一个有趣的问题&赏金:)。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?android:attr/actionBarSize" > <<<-- ?attr/actionBarSize
for compatibility
....
....
</LinearLayout>