57

我可以对由最新版本的 Android Studio 创建的新空白 Activity 进行的最简单更改是什么,以使应用程序显示为全屏?

我想创建一个全屏 Android 应用程序。我正在使用 Android Studio。 这篇文章建议我添加一行,例如...

android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen"

...到AndroidManifest.xml文件,如下图:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.lexogram.james.blackslate" >

            <application
                    android:allowBackup="true"
                    android:icon="@drawable/ic_launcher"
                    android:label="@string/app_name"
                    android:theme="@style/AppTheme" >
                    <activity
                            android:name="com.lexogram.james.blackslate.MainActivity"
                            android:label="@string/app_name"
                            android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen">
                            <intent-filter>
                                    <action android:name="android.intent.action.MAIN" />

                                    <category android:name="android.intent.category.LAUNCHER" />
                            </intent-filter>
                    </activity>
            </application>

    </manifest>

当我这样做时,应用程序编译但它在启动时崩溃。如果我删除该行,应用程序运行良好,但有操作栏和标题栏,正如其他用户所指出的那样。

这是我第一次尝试创建 Android 应用程序,因此我的应用程序与最初的 Hello World 示例几乎没有改变。

编辑:我创建了一个新项目,并对其进行了一次更改。以下是错误日志的摘录:

FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lexogram.james.test/com.lexogram.james.test.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)...

注意:我正在运行 Android 2.2 (Froyo) 的旧三星 SGH-T499Y 上进行测试

4

15 回答 15

83

您遇到此问题是因为您尝试应用的活动android:theme="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen">正在扩展 ActionBarActivity,这需要应用 AppCompat 主题。

Activity从而不是从扩展您的活动ActionBarActivity

您可能需要相应地更改您的 Java 类。

如果您也想删除状态栏,请setContentView(layout)onCreateView方法之前使用它

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
于 2014-10-24T11:36:42.803 回答
52

只需将以下属性添加到您当前的主题:

<item name="android:windowFullscreen">true</item>

例如:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/orange</item>
    <item name="colorPrimaryDark">@android:color/holo_orange_dark</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>
于 2016-11-01T08:24:14.583 回答
20

只需在活动标签的清单文件中执行此操作

android:theme="@style/Theme.AppCompat.Light.NoActionBar"
于 2015-08-05T20:14:13.877 回答
12

就我而言,一切正常。在 logcat 中查看。也许 logcat 显示一些可以帮助您解决问题的东西

无论如何,您可以尝试以编程方式进行操作:

 public class ActivityName extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // remove title
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setContentView(R.layout.main);
        }
 }
于 2014-10-24T08:32:38.380 回答
8

只需在styles.xml 中声明

  <style name="AppTheme.Fullscreen" parent="AppTheme">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
  </style>

然后在menifest.xml中使用

    <activity
        android:name=".activities.Splash"
        android:theme="@style/AppTheme.Fullscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

清凉丸:)

于 2020-03-28T10:32:11.243 回答
8

更新我添加的答案android:windowIsTranslucent,以防您在活动开始时出现白屏

只需在values/styles.xml中创建新样式

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- to hide white screen in start of window -->
    <item name="android:windowIsTranslucent">true</item>
    </style>

</resources>

从您的 AndroidManifest.xml 为您的活动添加样式

android:theme="@style/AppTheme"

变成这样

<activity android:name=".Splash"
            android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
于 2015-09-10T07:42:25.287 回答
4

onCreate通话中

requestWindowFeature(Window.FEATURE_NO_TITLE); // for hiding title

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                            WindowManager.LayoutParams.FLAG_FULLSCREEN);
于 2015-04-05T08:47:35.407 回答
4

您可以使用以下代码在android中拥有一个完整的页面

第 1 步:在 styles.xml 部分制作主题

<style name="AppTheme.Fullscreen" parent="AppTheme">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

第 2 步:在 AndroidManifest.xml 上添加主题

<activity
android:name=“.Activity”
android:theme="@style/AppTheme.Fullscreen"/>

第 3 步:Java 代码部分

例如,您可以在 onCreate() 方法中添加以下代码。

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
于 2018-09-16T13:35:01.417 回答
4

根据此文档,将以下代码添加到onCreate

getWindow().getDecorView().setSystemUiVisibility(SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
        SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION   | 
        SYSTEM_UI_FLAG_LAYOUT_STABLE | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
于 2019-08-16T14:44:27.107 回答
2

如果您签出当前的 Android Studio。您可以使用全屏模板创建一个新活动。如果您创建这样的活动。您可以查看 Android Studio 用于在全屏和正常模式之间切换的基本代码。

显示全屏活动的画廊

这是我在那里找到的代码。通过一些小的调整,我相信你会得到你需要的。

public class FullscreenActivity extends AppCompatActivity {
    private static final boolean AUTO_HIDE = true;
    private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
    private static final int UI_ANIMATION_DELAY = 300;
    private final Handler mHideHandler = new Handler();
    private View mContentView;
    private final Runnable mHidePart2Runnable = new Runnable() {
        @SuppressLint("InlinedApi")
        @Override
        public void run() {
            // Delayed removal of status and navigation bar

            // Note that some of these constants are new as of API 16 (Jelly Bean)
            // and API 19 (KitKat). It is safe to use them, as they are inlined
            // at compile-time and do nothing on earlier devices.
            mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        }
    };
    private View mControlsView;
    private final Runnable mShowPart2Runnable = new Runnable() {
        @Override
        public void run() {
            // Delayed display of UI elements
            ActionBar actionBar = getSupportActionBar();
            if (actionBar != null) {
                actionBar.show();
            }
            mControlsView.setVisibility(View.VISIBLE);
        }
    };
    private boolean mVisible;
    private final Runnable mHideRunnable = new Runnable() {
        @Override
        public void run() {
            hide();
        }
    };
    private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (AUTO_HIDE) {
                delayedHide(AUTO_HIDE_DELAY_MILLIS);
            }
            return false;
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_fullscreen);

        mVisible = true;
        mControlsView = findViewById(R.id.fullscreen_content_controls);
        mContentView = findViewById(R.id.fullscreen_content);


        // Set up the user interaction to manually show or hide the system UI.
        mContentView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                toggle();
            }
        });

        // Upon interacting with UI controls, delay any scheduled hide()
        // operations to prevent the jarring behavior of controls going away
        // while interacting with the UI.
        findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener);
    }
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        // Trigger the initial hide() shortly after the activity has been
        // created, to briefly hint to the user that UI controls
        // are available.
        delayedHide(100);
    }
    private void toggle() {
        if (mVisible) {
            hide();
        } else {
            show();
        }
    }
    private void hide() {
        // Hide UI first
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }
        mControlsView.setVisibility(View.GONE);
        mVisible = false;

        // Schedule a runnable to remove the status and navigation bar after a delay
        mHideHandler.removeCallbacks(mShowPart2Runnable);
        mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY);
    }
    @SuppressLint("InlinedApi")
    private void show() {
        // Show the system bar
        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
        mVisible = true;

        // Schedule a runnable to display UI elements after a delay
        mHideHandler.removeCallbacks(mHidePart2Runnable);
        mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY);
    }
    private void delayedHide(int delayMillis) {
        mHideHandler.removeCallbacks(mHideRunnable);
        mHideHandler.postDelayed(mHideRunnable, delayMillis);
    }
}

现在我进一步检查了如何以更简单的方式完成此操作。在您的styles.xml文件中更改AppTheme样式将是最有帮助的。这会将您的所有活动更改为全屏视图。

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>

如果您只希望某些活动看起来全屏,您可以创建一个新的 AppTheme 来扩展您当前的应用程序主题,并将上述代码包含在您创建的新样式中。这样,您只需style=yournewapptheme在清单中设置您想要进入全屏的任何活动

于 2020-04-29T05:42:58.480 回答
0
fun Activity.showSystemUi() {
    this.window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            )
}
于 2022-01-17T11:27:08.850 回答
0

您可以在全屏模式下制作应用程序,只需一行代码。我在我的代码中使用它。

只需在 style.xml 中设置 AppTheme -> Theme.AppCompat.Light.NoActionBar

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

它适用于所有页面..

于 2020-06-17T17:19:36.200 回答
0

我最近遇到了完全相同的问题,并且也从以下帖子中受益(除了上面的 Rohit5k2 的解决方案):

https://bsgconsultancy.wordpress.com/2015/09/13/convert-any-website-into-android-application-by-using-android-studio/

在第 3 步中,MainActivity扩展Activity而不是ActionBarActivity(如 Rohit5k2 所述)。将NoTitleBarFullscreen主题元素放入AndroidManifest.xml文件中的正确位置也非常重要(请看第 4 步)。

于 2015-09-14T12:27:19.637 回答
0

不推荐为“FLAG_FULLSCREEN”添加当前工作解决方案

在themes.xml 中将以下内容添加到您的主题中

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>

非常适合我。

于 2020-11-29T22:54:03.250 回答
0

将这些添加到应用程序的 Activity 中。

安卓 JAVA

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  WindowManager.LayoutParams.FLAG_FULLSCREEN)

;

安卓科特林

supportActionBar?.hide()
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
于 2020-06-13T17:50:53.940 回答