一些背景知识:我为以前在手机上长时间播放的游戏添加了平板电脑支持。一些活动组成了一个“向导”,用户在游戏开始之前选择游戏类型,一些选项和对手。对于使用继承Theme.AppCompat.DialogWhenLarge
这些活动的主题的平板电脑版本看起来像一个好的,简单的解决方案。这在使用appcompat-v7版本22.0.0时工作正常。
在appcompat-v7版本22.1中,在所有这些 DialogWhenLarge 活动中,突然getSupportActionBar()
开始在平板电脑上返回null
。我依靠操作栏进行后退导航,更重要的是依靠搜索和其他按钮。
在平板电脑上获取这些活动的操作栏的适当方法是什么?我需要实现自己的工具栏吗?
我尝试在requestWindowFeature(Window.FEATURE_ACTION_BAR)
中调用onCreate
(在调用超级之前),但这没有效果。我尝试从AppCompatActivity
而不是ActionBarActivity
进行子类化,但这对任何一方都没有帮助(包括和不包含requestWindowFeature)。
我在Android开发者博客上阅读了这个新版本库以及Chris Banes' blog post的Ian Lake's post;我无法看到任何提及动作栏不再可用的内容。
答案 0 :(得分:4)
我有同样的问题。我找到修复它的唯一方法是用工具栏替换操作栏。
// Replace the action bar with a toolbar
Toolbar toolbar = (Toolbar)findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
我的工具栏布局:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/DefaultActionBarTheme"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
包含在我的活动中:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/detail_root"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include android:id="@+id/tool_bar" layout="@layout/tool_bar" />
<ListView
android:id="@+id/detail_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="always" />
</LinearLayout>
DefaultActionBarTheme(在styles.xml中):
<!-- Action bar theme -->
<style name="DefaultActionBarTheme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="colorControlNormal">#1d7caf</item>
</style>