java - 如何使用 Holo.NoActionBar 主题隐藏 HTC one 上的操作栏

标签 java android android-actionbar android-theme android-styles

我的应用程序使用 android Holo.NoActionBar 主题来隐藏操作栏并显示 Activity 。

这在模拟器和我的 Nexus 4 上运行良好,设备操作栏被隐藏。

但是,当它在 HTC one 上运行时,它会忽略 Android 主题设置并显示操作栏。它也可能会显示在其他一些具有自定义 OEM 皮肤的三星或索尼设备上。我已确保 Activity java 文件或 Android list 文件中没有对操作栏或菜单选项的引用。

所以我用谷歌搜索了如何隐藏操作栏并尝试了这个 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”

“此检查分析方法控制和数据流,以报告始终为真或假的可能条件、其值被静态证明为恒定的表达式以及可能导致可空性契约(Contract)违规的情况”

虽然我是android开发的新手,但我知道NullPointerException不应该被忽略。

但是在这个 Activity 中,隐藏操作栏很重要。

如何修改此代码以使其不易出错?

更新:为什么 Holo.NoActionBar 不能与 HTC one 一起使用。它仍然显示操作栏,而安装相同的 apk 在 Nexus 4 上不显示操作栏

Android list :

<?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 及更高版本

最佳答案

您的 Activity t1AndroidManifest.xml中没有应用任何主题,因此它使用您的应用程序的默认主题 - 在您的情况下,@ style/AppTheme 其中包括一个操作栏。在 list 中设置主题:

<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>

关于java - 如何使用 Holo.NoActionBar 主题隐藏 HTC one 上的操作栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25354157/

相关文章:

android - 如何在 Jetpack Compose 中放大图像?

Javafx 将新的 fxml 文件加载到滚动 Pane 中

java - 在 `equals(T value)` 中,T 必须是 Object,还是可以像 City 等?

android - 在回收器 View 的适配器内的单项 View 中使用 ViewModel 方法好吗?

安卓人行横道元素 : How to use css?

android - 从 ActionBarSherlock 迁移到 ActionBarCompat 时有哪些常见问题?

java - 如何在工具栏的后退箭头上显示和设置点击事件?

java - ActionBar 三点下拉菜单在错误的位置打开

java - "hadoop namenode -format"返回 java.net.UnknownHostException

java - 在 DTconsole 中窗口 ID 达到 59 后重置为 0