• Android 中沉浸式状态栏实现


    Android 中沉浸式状态栏实现方式如下

    计算状态栏高度及调用沉浸式状态栏的相关API方法

     1 package com.example.status;
     2 import android.annotation.TargetApi;
     3 import android.app.Activity;
     4 import android.content.Context;
     5 import android.os.Build;
     6 import android.view.View;
     7 import android.view.Window;
     8 import android.view.WindowManager;
     9 public class ImmersedStatusbarUtils {
    10      
    11     /**
    12      * 在{@link Activity#setContentView}之后调用
    13      * 
    14      * @param activity
    15      *            要实现的沉浸式状态栏的Activity
    16      * @param titleViewGroup
    17      *            头部控件的ViewGroup,若为null,整个界面将和状态栏重叠
    18      */
    19     @TargetApi(Build.VERSION_CODES.KITKAT)
    20     public static void initAfterSetContentView(Activity activity,
    21             View titleViewGroup) {
    22         if (activity == null)
    23             return;
    24         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    25             Window window = activity.getWindow();
    26             window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    27         }
    28         if (titleViewGroup == null)
    29             return;
    30         // 设置头部控件ViewGroup的PaddingTop,防止界面与状态栏重叠
    31         int statusBarHeight = getStatusBarHeight(activity);
    32         titleViewGroup.setPadding(0, statusBarHeight, 0, 0);
    33  
    34     }
    35  
    36     /**
    37      * 获取状态栏高度
    38      * 
    39      * @param context
    40      * @return
    41      */
    42     private static int getStatusBarHeight(Context context) {
    43         int result = 0;
    44         int resourceId = context.getResources().getIdentifier(
    45                 "status_bar_height", "dimen", "android");
    46         if (resourceId > 0) {
    47             result = context.getResources().getDimensionPixelSize(resourceId);
    48         }
    49         return result;
    50     }
    51 }

    调用实例,使用步骤一编写的相关方法。

     1 package com.example.status;
     2  
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.Menu;
     6 import android.view.View;
     7 import android.view.Window;
     8  
     9 public class MainActivity extends Activity {
    10  
    11     @Override
    12     protected void onCreate(Bundle savedInstanceState) {
    13         super.onCreate(savedInstanceState);
    14         requestWindowFeature(Window.FEATURE_NO_TITLE);
    15         setContentView(R.layout.activity_main);
    16         View topView = findViewById(R.id.lin);
    17         ImmersedStatusbarUtils.initAfterSetContentView(this, topView);
    18     }
    19  
    20     @Override
    21     public boolean onCreateOptionsMenu(Menu menu) {
    22         // Inflate the menu; this adds items to the action bar if it is present.
    23         getMenuInflater().inflate(R.menu.main, menu);
    24         return true;
    25     }
    26  
    27 }

    对应的布局文件

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6  
     7     <LinearLayout
     8         android:id="@+id/lin"
     9         android:layout_width="match_parent"
    10         android:layout_height="wrap_content"
    11         android:background="#ff123654" >
    12  
    13         <TextView
    14             android:id="@+id/title"
    15             android:layout_width="match_parent"
    16             android:layout_height="45.0dp"
    17             android:background="#ff123654"
    18             android:gravity="center"
    19             android:text="我是头部控件"
    20             android:textColor="#ffffffff" />
    21     </LinearLayout>
    22  
    23 </LinearLayout>

  • 相关阅读:
    坦克大战
    java多线程应用场景
    java中的多线程(资料)
    设置线程名
    线程名称的设置及取得
    java调试
    文件上传细节处理
    Servlet生命周期
    java的动态绑定与静态绑定
    Mysql 连接池调用完成后close代理方法引出的设计模式
  • 原文地址:https://www.cnblogs.com/huolongluo/p/5906541.html
Copyright © 2020-2023  润新知