• Android App如何隐藏标题栏并修改状态栏样式


    1、存在问题

            我们在Android开发过程中,在创建APP界面时都会存在默认的样式,大多数时候我们的APP页面都是不需要标题栏的,例如下面的这个页面存在的标题栏就显得非常丑陋。

                                                    

      2、解决方案     

            总体来说,Android隐藏标题栏分两种方式:onCreate中使用代码隐藏  和  AndroidMainfest 定义Activity主题隐藏。

    (1)onCreate中使用代码隐藏

            Activity继承自Activity时

           在setContentView方法前加入以下代码:

    1. @Override
    2. protected void onCreate(Bundle savedInstanceState) {
    3. super.onCreate(savedInstanceState);
    4. setContentView(R.layout.activity_main);
    5. //隐藏标题栏
    6. requestWindowFeature(Window.FEATURE_NO_TITLE); 
    7. System.out.println("MainActivity:onCreate()方法执行了,主界面被创建了");
    8. }

            Activity继承自AppCompatActivity时,

    1. @Override
    2. protected void onCreate(Bundle savedInstanceState) {
    3. super.onCreate(savedInstanceState);
    4. //隐藏标题栏
    5. Objects.requireNonNull(getSupportActionBar()).hide();
    6. setContentView(R.layout.activity_main);
    7. System.out.println("MainActivity:onCreate()方法执行了,主界面被创建了");
    8. }

    (2)AndroidManifest文件中改变Activity的主题 

            在res--->values--->styles--->中加入以下代码:

    <style name="MyStyle" parent="Theme.AppCompat.Light.NoActionBar"/>

            然后在需要隐藏标题栏的activity标签声明中,加入以下代码即可 android:theme="@style/MyStyle"

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2. xmlns:app="http://schemas.android.com/apk/res-auto"
    3. xmlns:tools="http://schemas.android.com/tools"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent"
    6. android:background="@color/fullwhite"
    7. android:orientation="vertical"
    8. //引用我们自定义的Style
    9. android:theme="@style/MyStyle"
    10. tools:context=".MainActivity"
    11. tools:visibility="visible">

           隐藏状态栏

    1. public class MainActivity extends AppCompatActivity {
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. //隐藏标题栏
    6. Objects.requireNonNull(getSupportActionBar()).hide();
    7. setContentView(R.layout.activity_main);
    8. //设置状态栏全透明
    9. setStatusBarFullTransparent();
    10. System.out.println("MainActivity:onCreate()方法执行了,主界面被创建了");
    11. }
    12. /**
    13. * 全透状态栏
    14. */
    15. protected void setStatusBarFullTransparent() {
    16. if (Build.VERSION.SDK_INT >= 21) {//21表示5.0
    17. Window window = getWindow();
    18. window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    19. window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    20. | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    21. window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    22. window.setStatusBarColor(Color.TRANSPARENT);
    23. getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    24. } else if (Build.VERSION.SDK_INT >= 19) {//19表示4.4
    25. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    26. //虚拟键盘也透明
    27. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    28. }
    29. }
    30. }

    3、结果

                            ​​​​​​​        

     

  • 相关阅读:
    一个简单好用的localstorage组件store
    MySQL中的内置函数
    如何通过企业用户画像更好地拓客
    Java子类继承父类私有方法属性问题讲解
    4. Vue入门实战教程之vue-element-admin后端API适配
    论文解读 | 点对照:3D点云理解无监督式预训练
    简述 Mock 接口测试
    预测性维护为何能够帮助企业降低设备维护成本?
    自用纯C语言实现任务调度(可用于STM32、C51等单片机)
    【licode】基于webrtc的客户端
  • 原文地址:https://blog.csdn.net/m0_37718750/article/details/125928057