Android:制作全屏应用程序

Posted

技术标签:

【中文标题】Android:制作全屏应用程序【英文标题】:Android: making a fullscreen application 【发布时间】:2014-12-20 00:24:35 【问题描述】:

我可以对由最新版本的 android Studio 创建的新空白 Activity 进行哪些最简单的更改,以使应用全屏显示?

我想创建一个全屏 Android 应用程序。我正在使用 Android Studio。 This post 建议我添加一行...

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 ComponentInfocom.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 上进行测试

【问题讨论】:

应用崩溃时会出现什么错误?在 Android Studio 中检查 LogCat 输出(崩溃错误总是以 FATAL 开头并显示为红色)。 您是否使用了自定义主题(可能是某些属性)中的任何内容,而这些内容在全屏默认主题中不可用?如果您在审阅屏幕上选择该主题,您的视图是否会呈现(我使用的是 Eclipse,所以不知道 Android Studio 中的等价物是什么)。您的日志应该告诉您发生了什么以及确切的错误是什么,但对我来说,这通常是更改活动主题时的问题。 当你使用主题 Holo.Light.NoActionBar 时你打电话给getActionBar() 吗?它返回 null,如果你是 setTitle("") 或类似的东西,它将是 NullPointerException @kha 该视图在 Android Studio 的预览屏幕中呈现。但是,当我在与我的真实设备对应的模拟器上预览时,我收到以下警告:渲染问题无法解析文件 /Applications/Third Party/Android/Android Studio.app/sdk/platforms/android-21/data/res /color/secondary_text_holo_dark.xml 标签需要“drawable”属性或定义可绘制对象的子标签。 如果我在更现代的模拟器上预览,则不会出现上述警告,例如 API 20: Android 4.4W。 【参考方案1】:

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

Activity而不是ActionBarActivity扩展您的活动

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

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

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

【讨论】:

您必须从 ActionBarActivity 扩展您的活动类,将其更改为 Activity。 ActionBarActivity 无法切换到全屏。 首先我在进行此更改后出现错误,但后来我意识到它还需要我将 import android.support.v7.app.ActionBarActivity 替换为 import android.app.Activity,现在我看不到操作栏,但状态栏仍然存在,因此应用还没有完全全屏。 谢谢 Rohit5k2。你的编辑版本给了我我希望的结果。 但是这段代码只隐藏了状态栏。有什么方法也可以隐藏系统导航栏。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

在我的情况下一切正常。在 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);
        
 

【讨论】:

【参考方案5】:

更新答案我添加了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>

【讨论】:

【参考方案6】:

只需在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>

镇静丸:)

【讨论】:

【参考方案7】:

onCreate通话中

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

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

【讨论】:

【参考方案8】:

您可以使用以下代码在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);

【讨论】:

【参考方案9】:

根据this document,将以下代码添加到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);

【讨论】:

【参考方案10】:

如果您签出当前的 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

【讨论】:

【参考方案11】:

我最近遇到了完全相同的问题,并且也从以下帖子中受益(除了上面 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 步)。

【讨论】:

【参考方案12】:

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

Android JAVA

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

;

Android Kotlin

supportActionBar?.hide()
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)

【讨论】:

欢迎来到 Stack Overflow。一点上下文和解释将大大改善这个答案。在使用现有答案添加旧问题的答案时,重要的是要指出您的答案所针对的问题的哪些新方面,并注意所涉及的技术在被问到问题后是否发生了变化,这是否与您的答案相关。跨度> 【参考方案13】:

您可以将App in FullScreen Mode制作成一行代码。我在我的代码中使用它。

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

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

它适用于所有页面..

【讨论】:

【参考方案14】:

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

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

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

非常适合我。

【讨论】:

【参考方案15】:
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
            )

【讨论】:

此问题有 14 个现有答案,其中包括一个获得最高票数且获得超过 8 票 的答案。你确定你的解决方案还没有给出吗?如果不是,您为什么认为您的方法改进了已被社区验证的现有提案?在 Stack Overflow 上,提供解释总是很有用,但在问题已得到解决且让 OP 和社区都满意的情况下,它尤其很重要。通过解释您的答案有何不同以及何时可能更受欢迎,帮助读者了解答案。

以上是关于Android:制作全屏应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在android中自动旋转全屏视频

在android webview中制作嵌入视频全屏

如何在全屏图像上放置评论?

Android应用如何全屏显示

如何为所有分辨率制作全屏图像

如何全屏制作asp网站? [关闭]