【问题标题】:Android Navigation - Hide action bar for loading/splash screen?Android导航 - 隐藏加载/启动屏幕的操作栏?
【发布时间】:2020-07-15 18:11:26
【问题描述】:

我想知道是否有一个很好的模式/方法来隐藏启动/加载屏幕的操作栏?我知道这种模式不是很好,但我们正在改造一个使用这种模式的现有应用程序。 无论如何,对于对话框或全屏片段等您可能不一定希望显示操作栏的事情,这似乎是一件很常见的事情。

我知道它可以用类似的东西相当简单地完成

 override fun onResume() {
        super.onResume()
        activity?.findViewById<Toolbar>(R.id.toolbar)?.visibility = GONE
    }

    override fun onPause() {
        super.onPause()
        activity?.findViewById<Toolbar>(R.id.toolbar)?.visibility = VISIBLE
    }

但我只是好奇是否有更好的方法来使用 NavOptions 或类似的东西来控制操作栏。

【问题讨论】:

  • 我遇到了类似的问题,你的方法是我用的,如果你没有在你的活动中手动添加工具栏,你可以简单地使用活动?.supportActionBar?.hide()。

标签: android android-architecture-navigation android-navigation-graph android-navigation-bar android-components


【解决方案1】:

将启动屏幕活动的样式设置为

Theme.MaterialComponents.DayNight.NoActionBar

或者一些类似的NoActionBar风格

【讨论】:

    【解决方案2】:

    您可以使用 addOnDestinationChangedListener
    比如:

    navController.addOnDestinationChangedListener { _, destination, _ ->
       if(destination.id == R.id.splash_screen) {
           toolbar.visibility = View.GONE
       } else {
           toolbar.visibility = View.VISIBLE
       }
    }
    

    作为替代,您可以使用不同的东西。不要在加载屏幕上使用 Fragment
    仅为加载屏幕定义应用主题:

    <style name="LoadingTheme" parent="Theme.MaterialComponents.NoActionBar">
        <item name="android:windowBackground">@drawable/loading_background</item>
    </style>
    

    Manifest 中将此主题应用到您的MainActivity

    <activity android:name=".MainActivity"
                  android:theme="@style/LoadingTheme">
    

    终于在你的MainActivity:

    override fun onCreate(savedInstanceState: Bundle?) {
        setTheme(R.style.AppTheme_NoActionBar)
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //.....
    

    【讨论】:

      【解决方案3】:
      ActionBar actionBar = getActionBar();
      actionBar.hide();
      

      或者你可以直接在Manifest中更改

      <activity 
          android:name=".AnActivity"
          android:label="@string/a_string"
          android:theme="@android:style/Theme.NoTitleBar.Fullscreen>
      </activity>
      

      【讨论】:

        【解决方案4】:

        1) 内部片段使用,

        @Override
            public void onResume() {
                super.onResume();
                ((AppCompatActivity)getActivity()).getSupportActionBar().hide();
            }
        
        @Override
        public void onStop() {
            super.onStop();
            ((AppCompatActivity)getActivity()).getSupportActionBar().show();
        }
        

        2.在Activity使用中,

        getSupportActionBar().hide();

        或者通过在 styles.xml

        中创建新样式
        <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
              <item name="windowActionBar">false</item>
              <item name="windowNoTitle">true</item>
              <item name="android:windowFullscreen">true</item>
        </style>
        
        

        并在manifest.xml

        的activity中使用样式
        <activity ...
              android:theme="@style/AppTheme.NoActionBar" > ...
        </activity> 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-22
          • 2020-11-15
          • 1970-01-01
          • 2016-02-02
          • 2018-10-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多