我的应用程序使用android他们的Holo.NoActionBar主题来隐藏操作栏并显示活动。
这在模拟器上工作正常,我的Nexus 4,设备操作栏被隐藏。
但是当它在HTC上运行时,它会忽略android主题设置并显示操作栏。它也可能会显示在其他一些拥有自定义OEM皮肤的三星或索尼设备上。我确保在活动java文件或android清单文件中没有对操作栏或菜单选项的引用。
所以我用谷歌搜索了如何隐藏操作栏并尝试了这个How to hide action bar before activity is created, and then show it again?
并编写了代码
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getActionBar().hide();
setContentView(R.layout.activity_my);
和http://developer.android.com/guide/topics/ui/actionbar.html
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
setContentView(R.layout.activity_my);
然而,在这两种情况下,IDE都会显示一条警告,提示方法调用'actionBar.hide()'可能会产生'java.lang.NullPointerException'
“此检查分析方法控制和数据流,以报告始终为真或假的可能条件,静态证明其值为常量的表达式以及可能导致违约性合同违规的情况”
虽然我是Android开发的新手,但我知道不应该忽略NullPointerException。
但在此活动中,隐藏操作栏非常重要。
如何修改此代码以使其不易出错?
更新:为什么Holo.NoActionBar不能与HTC合作。它仍然显示操作栏,而安装相同的apk不会在nexus 4上显示操作栏
Android清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxxxxxxx.xxxxxxxxx" >
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MyActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
.
.
lots of non-relevant activities
.
.
<activity
android:name=".Setting"
android:label="@string/title_activity_setting"
android:parentActivityName=".MyActivity"
android:screenOrientation="portrait">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.xxxxxxxxx.xxxxxxxxxx.MyActivity" />
</activity>
<activity
android:name=".t1"
android:screenOrientation="portrait"
>
</activity>
<activity
android:name=".t2"
android:screenOrientation="portrait"
>
</activity>
<activity
android:name=".t3"
android:screenOrientation="portrait"
>
</activity>
<activity
android:name=".t4"
android:screenOrientation="portrait"
>
</activity>
<activity
android:name=".t5"
android:label="@string/title_activity_t5"
android:screenOrientation="portrait"
android:parentActivityName=".MyActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.xxxxxxxxxx.xxxxxxxxxx.MyActivity" />
</activity>
</application>
</manifest>
t1.java,没有Actionbar.hide()
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;
public class t1 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_t1);
RelativeLayout rl = (RelativeLayout) findViewById(R.id.rel1);
rl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent newactivity= new Intent(getApplicationContext(), t2.class);
startActivity(newactivity);
}
});
}
}
和t2,t3,t4,t5具有相似的代码
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.xxxxxxxxxx.xxxxxxxx.t1"
android:background="@drawable/finalp2"
android:id="@+id/rel1">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_marginTop="40dp"
android:background="@drawable/bat"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="40dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageViewbottom"
android:background="@drawable/bat"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="40dp"
android:layout_marginBottom="42dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:background="@android:drawable/ic_media_pause" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView4"
android:layout_below="@+id/imageView"
android:layout_toRightOf="@+id/imageView"
android:layout_toEndOf="@+id/imageView"
android:layout_marginTop="112dp"
android:background="@drawable/ball1" />
</RelativeLayout>
我如何选择主题:http://s16.postimg.org/6vuyjhwth/noactionbar.png
我还没有创建任何其他style.xml文件,我错过了什么?如果我确实错过了什么它在nexus 4上如何工作正常?为什么它在IDE中没有操作栏显示?
我的应用使用SDK 15及更高版本
答案 0 :(得分:1)
您的活动t1
未在AndroidManifest.xml
中应用任何主题,因此它使用您应用的默认设置 - 在您的情况下,@style/AppTheme
包含操作栏。在你的Manifest中设置一个主题:
<activity
android:name=".t1"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Holo.Light.NoActionBar"
>
</activity>
或者专门为无操作栏案例制作一个新主题:
<style name="AppTheme.NoActionBar" parent="android:Theme.Holo.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
并使用它:
<activity
android:name=".t1"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
>
</activity>
答案 1 :(得分:0)
我能够解决问题(感谢ianhanniballake提供的帮助,非常感谢)。
修改了styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
<style name="newTheme" parent="android:Theme.Holo.NoActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
和修改后的android清单
<activity
android:name=".t1"
android:screenOrientation="portrait"
android:theme="newtheme"
>
</activity>
<activity
android:name=".t2"
android:screenOrientation="portrait"
android:theme="newtheme"
>
</activity>
<activity
android:name=".t3"
android:screenOrientation="portrait"
android:theme="newtheme"
>
</activity>
<activity
android:name=".t4"
android:screenOrientation="portrait"
android:theme="newtheme"
>
</activity>
代码在HTC one和NEXUS上完美运行,非常感谢ianhanniballake