【问题标题】:Ionic 3 - Hide status bar during splash screen showIonic 3 - 在初始屏幕显示期间隐藏状态栏
【发布时间】:2018-12-01 06:13:07
【问题描述】:

我有一个带有 Ionic 3 的应用程序,并且在您的 app.component.ts 中,我使用 Statusbar ionic 插件来隐藏它,但是,这仅在触发平台就绪后才会发生。

如何在启动画面中隐藏它?我试过了:

– 在启动画面期间不隐藏,仅在此隐藏之后 - 在启动画面期间不改变背景颜色

解决方案?

【问题讨论】:

    标签: ionic-framework ionic2 ionic3 ionic-native


    【解决方案1】:

    我在使用基于 Cordova 的应用程序时遇到了同样的问题。在找到此解决方案之前,我无法弄清楚如何在 Splashcreen 期间隐藏状态栏(尝试了很多事情)。

    在启动画面中隐藏状态栏

    选项 1 - 自己编辑文件

    • 找到文件platforms/android/app/src/main/res/values/strings.xml

    • 通过编辑 XML 添加具有特定规则的自定义主题

       <?xml version='1.0' encoding='utf-8'?>
       <resources>
           <string name="app_name">My App Name</string>
           <string name="launcher_name">@string/app_name</string>
           <string name="activity_name">@string/launcher_name</string>
      
           <!-- Add your custom theme rules -->
           <style name="MyCustomTheme" parent="@style/Theme.AppCompat.NoActionBar">
               <item name="android:windowActionBar">false</item>
               <item name="android:windowNoTitle">true</item>
           </style>
       </resources>
      
    • 找到文件platforms/android/app/src/main/AndroidManifest.xml

    • 找到&lt;activity&gt;标签并添加对"MyCustomTheme"的引用

       <activity android:theme="@style/MyCustomTheme" ...etc...
      

    选项 2 - 从 Cordova config.xml 编辑文件

    • 您可能更喜欢直接从您的config.xml 文件管理此自定义主题,而无需自己编辑AndroidManifest.xmlstrings.xml。如果cordova platform remove androidcordova platform add android 会删除您的更改,这会很有帮助。

    • 在你的 config.xml 中添加这个

        <platform name="android">
      
            <!-- Edit the activity tag fo your AndroidManifest.xml -->
            <edit-config file="AndroidManifest.xml" mode="merge" target="/manifest/application/activity">
                <activity android:theme="@style/MyCustomTheme"/>
            </edit-config>
      
            <!-- Edit the strings.xml file -->
            <edit-config file="strings.xml" mode="add" target="/resources">
                <style name="MyCustomTheme" parent="@style/Theme.AppCompat.NoActionBar">
                    <item name="android:windowActionBar">false</item>
                    <item name="android:windowNoTitle">true</item>
                </style>
            </edit-config>
      
        </platform>
      
    • 最后一步,请记住,为了能够使用 config.xml 文件中的 &lt;edit-config&gt; 标签,您需要将此 xmlns 属性添加到 &lt;widget&gt; 标签中。

        <?xml version='1.0' encoding='utf-8'?>
        <widget xmlns:android="http://schemas.android.com/apk/res/android" ...etc...
      

    如果您有更好的选择,我很想知道!

    【讨论】:

      【解决方案2】:

      在 MainActivity 页面中添加代码后 我运行命令来构建 apk 我收到了这个错误

       任务 :app:compileDebugJavaWithJavac 失败
      E:\Ionic\AIOU_Solutions1\platforms\android\app\src\main\java\io\ionic\starter\MainActivity.java:38:错误:WindowManager 包不存在
              getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

      【讨论】:

        【解决方案3】:

        安卓

        似乎没有优雅的方式在应用启动时隐藏状态栏。 但有一种方法可以做到这一点。

        1. 找到MainActivity.java(可能是platforms/android/src/io/ionic/starter
        2. 添加以下代码

        import android.view.WindowManager;

        public class MainActivity extends CordovaActivity
        {
            @Override
            public void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
        
                // enable Cordova apps to be started in the background
                Bundle extras = getIntent().getExtras();
                if (extras != null && extras.getBoolean("cdvStartInBackground", false)) {
                    moveTaskToBack(true);
                }
                // [Hyuck] add this two line below    
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
                // Set by <content src="index.html" /> in config.xml
                loadUrl(launchUrl);
            }
        
            // [Hyuck] onStart() is totally new.
            @Override
            public void onStart()
            {
                super.onStart();
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
            }
        }
        

        IOS

        我只能测试 Android 设备。所以,我就留下the link,这可能会解决你的问题

        【讨论】:

        • 谢谢赫赫!我在大多数日子里都在寻找这个,但是,我找不到一个漂亮的解决方案。您的 android 解决方案解决了问题,但是该平台不包含在 git 中。在这种情况下,如果添加或删除平台,则应始终对 android 文件进行更改。在 Cordova 文档中,首选项“全屏”承诺了这项工作,但在大多数 android 设备中,此选项隐藏了本机导航栏(屏幕底部)。这种科尔多瓦解决方案是一个完美的幻想。再次感谢您的回复,这证实了我的可悲嫌疑人。
        • 是的,有时cordova插件(this或inappbrowser等)没有我们需要的足够功能。无论如何,您可以考虑使用 gulp 来制作自动修改代码的脚本(仍然不那么烦人)。这是我真正习惯处理的事情。
        • 在我的情况下,我也想隐藏状态栏,但一直隐藏,不仅在应用程序启动期间(启动画面)。您的解决方案在应用启动时也适用于我。但是,如果您暂时退出应用程序(例如:关闭设备屏幕),那么当您回来时,状态栏将再次可见。并且无法使用 StatusBar.hide() 隐藏它。有任何想法吗?我们可以在 MainActivity.java 文件中添加一个函数 onResume() 来完成与你的函数 onStart() 相同的工作吗?谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多