调用getActionBar
会返回null
。这经常被报道,所以我确保包含其他人使用的解决方案:我的minSdkVersion=11
,我有一个标题栏,我在getActionBar
之后打电话给setContentView
。此外,我的活动不是儿童活动。
setContentView(R.layout.main);
// experiment with the ActionBar
ActionBar actionBar = getActionBar();
actionBar.hide();
设备是运行Android 3.2的三星Galaxy Tab 10.1
提前感谢任何想法或建议!
答案 0 :(得分:59)
您似乎需要通过主题或下面的代码请求操作栏(!=标题栏)。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The Action Bar is a window feature. The feature must be requested
// before setting a content view. Normally this is set automatically
// by your Activity's theme in your manifest. The provided system
// theme Theme.WithActionBar enables this for you. Use it as you would
// use Theme.NoTitleBar. You can add an Action Bar to your own themes
// by adding the element <item name="android:windowActionBar">true</item>
// to your style definition.
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.main);
// experiment with the ActionBar
ActionBar actionBar = getActionBar();
actionBar.hide();
}
来自[here]的代码
答案 1 :(得分:11)
为了实现这一点,似乎需要满足几个条件。那个困扰我很久的人是:
确保您的活动扩展了Activity(NOT ActionBarActivity)。
public class MagicActivity extends Activity
确保您的应用清单有类似
的内容<application
...
android:theme="@android:style/Theme.Holo" >
并确保您的活动布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
....
android:theme="@android:style/Theme.WithActionBar" >
-Mark
答案 2 :(得分:10)
我似乎通过使用 getSupportActionBar()切换 getActionBar()来解决所有错误。 我尝试过不同的主题,添加 getWindow()。requestFeature(Window.FEATURE_ACTION_BAR); , 确保setContentView(view)是第一个以及之前看到的所有其他东西。
答案 3 :(得分:8)
操作栏需要具有应用标题的主题或活动。确保您没有将您的应用程序或活动设置为Theme.NOTITLE。
<application
android:name="com.xxx.yyy.Application"
android:debuggable="false"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code
<activity
android:name="com.xxx.yyy.Activity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code
android:windowSoftInputMode="adjustResize|stateHidden" >
答案 4 :(得分:4)
我试图使用支持库从ActionBarActivity内的片段中获取ActionBar。我不得不这样做:
ActionBarActivity actionBarActivity = (ActionBarActivity)getActivity();
ActionBar actionBar = actionBarActivity.getSupportActionBar();
我的下一个任务是弄清楚如何制作这个通用的。例如,这段代码感觉很脏,因为它需要我的Fragment知道ActionBarActivity正在使用它并使用支持库。我认为它应该是一个方法,如果父Activity不是ActionBarActivity,首先检查getActivity().getActionBar()
后跟上面代码捕获ClassCastException。
答案 5 :(得分:2)
如果您为API14或更高版本创建应用程序项目,则会有一个values-14文件夹。确保该文件夹存在且它的styles.xml文件包含:
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
</style>
我收到此错误是因为我创建了一个新项目,并且我在项目中不想要任何额外的值文件夹,所以我只保留了values文件夹并删除了值-v11和values-v14文件夹。但显然,如果要使用ActionBar,API14及更高版本的默认主题需要在其中使用ActionBar的父XML标记。所以我认为我可以做错了!希望这有助于某人。尽管如此,您最有可能通过上述答案解决问题。
答案 6 :(得分:2)
这解决了我的问题:
android.support.v7.app.ActionBar ab = getSupportActionBar();
答案 7 :(得分:1)
真正的答案应该是@zapl和@Himanshu Virmani的组合
对于Android Manifest:
<application
android:name="com.xxx.yyy.Application"
android:debuggable="false"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code
<activity
android:name="com.xxx.yyy.Activity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@style/Theme.NoTitle" // remove this line if you have this in your code
android:windowSoftInputMode="adjustResize|stateHidden" >
活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// The Action Bar is a window feature. The feature must be requested
// before setting a content view. Normally this is set automatically
// by your Activity's theme in your manifest. The provided system
// theme Theme.WithActionBar enables this for you. Use it as you would
// use Theme.NoTitleBar. You can add an Action Bar to your own themes
// by adding the element <item name="android:windowActionBar">true</item>
// to your style definition.
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_main);
// Hide the status bar for Android 4.1 and higher
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
// Remember that you should never show the action bar if the
// status bar is hidden, so hide that too if necessary.
ActionBar actionBar = getActionBar();
actionBar.hide();
}
答案 8 :(得分:1)
确保延长ACTIONBARACTIVITY而不是ACTIVITY 这应该可以解决你的问题
答案 9 :(得分:1)
2)片段文件添加 机器人:主题=&#34; @android:风格/ Theme.WithActionBar&#34;
答案 10 :(得分:1)
更改系统请求的顺序:
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// experiment with the ActionBar
ActionBar actionBar = getActionBar();
actionBar.hide();
}
答案 11 :(得分:0)
如果您正在开发针对sdk&gt; = 14的应用,并且您正在扩展AppCompat以支持以前版本中的Material主题。如果要隐藏操作栏中的项目(如后退按钮),则需要执行以下操作: 在你的活动中(不在片段类中) 如果你要使用getActionBar(),它将返回null。在Appsupport主题中,getSupportAcionBar()将返回操作栏。
如果您想关注DevByte
,请点击以下链接 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}
答案 12 :(得分:0)
也许您的活动风格基于NoActionBar
答案 13 :(得分:0)
步骤01:
更改您的班级家长。 向AppCompatActivity的活动
即:
public class BluetoothActivity extends AppCompatActivity {
//Your Code
}
步骤02:
创建一个全局变量,如下所示。 (我正在使用androidx。所以这就是导入的样子)
androidx.appcompat.app.ActionBar actionBar;
步骤03:
使用深色的操作栏,如下所示。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Your style -->
</style>
步骤04:
分配getSupportActionBar();变量,您可以在 onCreate 方法中将其创建为全局变量。
setContentView(R.layout.activity_bluetooth);
actionBar = getSupportActionBar(); //Create this After setContentView
actionBar.show(); //this is for Experimental process only
步骤05:
现在您可以使用actionBar做任何想做的事
即
actionBar.setTitle("Profile");