android中的windowTranslucentStatus和fitsSystemWindows的作用

一.Android4.4版本才有windowTranslucentStatus属性,在res文件夹下创建一个新的文件夹value-v19并新建styles.xml文件

这里写图片描述

给activity设置这个style,此时该页面可以拉伸到顶部状态栏,并且定义顶部状态栏透明。

二.android:fitsSystemWindows这个属性,主要是通过调整当前设置这个属性的view的padding(paddingTop)去为我们的status_bar留下空间。

以下用代码和图片解释清楚:
1.MainActivity

package com.example.immersivemode;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.id_toolbar);
        setSupportActionBar(toolbar);
        Log.e("MainActivity","statusBar height is " + getStatusBarHeight(this));
    }

    /**
     * 获取状态栏高度
     *
     * @param context context
     * @return 状态栏高度
     */
    private int getStatusBarHeight(Context context) {
        // 获得状态栏高度
        int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
        return context.getResources().getDimensionPixelSize(resourceId);
    }

}

2.对应的布局文件activity_main.xml(特别注意:MyToolBar的android:layout_height必须设置成wrap_content,这样它的高度会随着paddingTop的变化而相应的变化)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.example.immersivemode.MyToolBar
        android:id="@+id/id_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:fitsSystemWindows="true"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

    <TextView
        android:id="@+id/id_tv_content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="center"
        android:text="HelloWorld"
        android:textSize="30sp"/>

</LinearLayout>

3.自定义的MyToolBar(主要用来查看padding)

package com.example.immersivemode;

import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.util.Log;

public class MyToolBar extends Toolbar {

    public MyToolBar(Context context) {
        super(context);
    }

    public MyToolBar(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        Log.e("MyToolBar", "mPaddingTop is " + getPaddingTop());
    }
}

在4.4上运行后如下效果:

这里写图片描述
图1

日志输出为:

statusBar height is 66
mPaddingTop is 66

当将activity_main.xml中的MyToolBar中的android:fitsSystemWindows=”true”去掉时,效果如下:

这里写图片描述
图2
日志输出为:

statusBar height is 66
mPaddingTop is 0

由此可见,当设置android:fitsSystemWindows = true时,系统会为该view设置paddingTop(大小等于状态栏的高度),从而实现图1的效果

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: android:fitsSystemWindows是一个布局属性,用于指定布局是否需要考虑系统窗口的影响。当设置为true时,布局会被调整以适应系统窗口的边界,例如状态栏和导航栏。这个属性通常用于全屏模式下的布局,以确保布局不会被系统窗口遮挡。 ### 回答2: android:fitsSystemWindows是一个可以用来配置View的属性。它的作用是告诉View是否要改变自己的尺寸来适应系统窗口的大小变化。系统窗口可以是状态栏、导航栏等。当设置android:fitsSystemWindows为true时,View会自动调整自己的尺寸,使其内容不被系统窗口遮挡。当设置为false时,View会忽略系统窗口的大小变化,保持原有的尺寸。 使用android:fitsSystemWindows属性可以在设计界面时考虑到系统窗口的变化,确保内容能够完整的展示在屏幕上。一般情况下,顶部的状态栏与底部的导航栏会占据一部分屏幕空间,如果不适配这些系统窗口,可能会导致View的内容被遮挡或者布局不合理。 需要注意的是,android:fitsSystemWindows属性只会影响到直接包含该属性的View,而不会影响其子View。如果需要对所有子View都进行适配,可以在父View设置android:fitsSystemWindows属性为true。 总结来说,android:fitsSystemWindows属性的主要作用是用来适应系统窗口的大小变化,确保View的内容能够完整显示在屏幕上。在设计界面时,可以根据实际需求灵活配置该属性,以获得更好的用户体验。 ### 回答3: android:fitsSystemWindows是一个针对Android应用程序窗口的布局属性,用于指定窗口内容是否需要适应系统窗口区域。 在Android系统,系统窗口区域指的是屏幕上的状态栏(StatusBar)和导航栏(NavigationBar)等系统UI元素所占据的区域。默认情况下,应用程序的内容会延伸到系统窗口区域内部,但有些时候我们可能希望应用程序的布局能够适应系统窗口区域的变化。 通过在layout文件使用android:fitsSystemWindows属性,可以控制应用窗口的布局是否考虑系统窗口区域。当android:fitsSystemWindows属性被设置为true时,表示应用程序的内容会被适应系统窗口区域,即内容将不会延伸至系统窗口区域内部。而当android:fitsSystemWindows属性被设置为false时,表示应用程序的内容不会适应系统窗口区域,即内容会延伸至系统窗口区域内部。 通过使用android:fitsSystemWindows属性,我们可以灵活地控制应用程序窗口的布局。例如,当我们希望应用程序的内容不被状态栏遮挡时,可以将android:fitsSystemWindows属性设置为true,使得内容适应状态栏所占据的区域,从而避免内容被状态栏遮挡。 需要注意的是,android:fitsSystemWindows属性只有在应用程序的主题设置了android:windowTranslucentStatusandroid:windowTranslucentNavigation属性时才会生效。这两个属性用于设置状态栏或导航栏的背景是否透明,如果没有设置这两个属性,即使设置了android:fitsSystemWindows为true,应用程序的内容仍然会延伸至系统窗口区域内部。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值