安卓获取状态栏(Status Bar)高度

本文首发地址 https://h89.cn/archives/190.html
最新更新地址 https://gitee.com/chenjim/chenjimblog

在应用开发过程中,我们经常需要动态计算状态栏高度,本文介绍几种方法。

方法一 直接使用24dp

Android 9.0 frameworks/base/core/res/res/中有如下

    <!-- Height of the status bar -->
    <dimen name="status_bar_height">@dimen/status_bar_height_portrait</dimen>
    <!-- Height of the status bar in portrait -->
    <dimen name="status_bar_height_portrait">24dp</dimen>
    <!-- Height of the status bar in landscape -->
    <dimen name="status_bar_height_landscape">@dimen/status_bar_height_portrait</dimen>

可以看到status_bar_height只有一个定值24dp,因此可以直接使用

Android 9.0的frameworks/base/core/res/res目录源码:https://android.googlesource.com/platform/frameworks/base/+archive/refs/heads/pie-release-2/core/res/res.tar.gz
同理 navigation_bar_height 可以直接用48dp

要想做到完美兼容,不建议直接用固定值,部分定制设备可能有其他值。

方法二 getDimensionPixelSize

获取系统中"status_bar_height"的值,方法如下

public static int getStatusBarHeight(Context context) {
    Resources resources = context.getResources();
    int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
    int height = resources.getDimensionPixelSize(resourceId);
    return height;
}

方法三 利用反射

public static int getStatusHeight(Activity activity) {
    int statusHeight = 0;
    try {
        Class<?> localClass = Class.forName("com.android.internal.R$dimen");
        Object localObject = localClass.newInstance();
        int h = Integer.parseInt(localClass.getField("status_bar_height").get(localObject).toString());
        statusHeight = activity.getResources().getDimensionPixelSize(h);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return statusHeight;
}

方法四 Compose UI 使用 WindowInsets

Modifier.padding(WindowInsets.statusBars.asPaddingValues())

本文到此结束,如果你在使用遇到问题,欢迎留言讨论。

<think>好的,我现在需要帮助用户解决在华为eNSP中配置三层交换机的问题。用户提到了寻找模型或配置方法,特别是教程相关的。首先,我得回忆一下eNSP的基本操作,三层交换机的配置通常涉及VLAN、VLANIF接口、路由功能等。 用户提供的引用中有两个例子,一个是接口配置,另一个是DHCP中继的配置。这可能意味着用户对基础配置和更高级的功能如DHCP中继都感兴趣。需要确保回答覆盖这两个方面,同时可能还要提到其他常见配置,比如静态路由或动态路由协议。 接下来,我需要考虑用户可能的实际应用场景。他们可能在搭建企业网络,需要三层交换机来实现不同VLAN间的通信,或者配置中继服务。因此,分步骤的配置指南会很有帮助,包括创建VLAN、配置VLANIF接口、设置IP地址以及路由部分。 还要注意用户提到的模型,可能是指eNSP中可用的三层交换机型号,比如S5700系列。需要确认在eNSP中常用的三层交换机设备,并建议用户如何添加这些设备到拓扑中。 另外,用户可能需要具体的命令示例,比如如何进入接口配置模式,如何分配IP地址,以及如何启用路由功能。需要确保这些命令正确无误,并且符合华为设备的配置语法。 最后,考虑到用户可能遇到的常见问题,比如物理连接错误、VLAN未正确划分或者路由配置遗漏,应该在注意事项部分提到这些点,帮助用户排查问题。</think>### eNSP三层交换机配置指南 在华为eNSP中配置三层交换机主要涉及**VLAN划分、VLANIF接口配置、路由功能实现**三个核心步骤。以下是具体操作流程: --- #### 一、基础环境搭建 1. **设备选型** eNSP支持的三层交换机型号包括S5700、S3700系列,拖拽设备时选择**S5700-SI**或**S5700-LI**型号(支持三层路由功能)。 2. **物理连接** - 用网线连接交换机的**GigabitEthernet0/0/1**接口与PC/服务器 - 交换机之间通过**GigabitEthernet0/0/2**接口互联(需配置Trunk模式) --- #### 二、核心配置步骤 1. **创建VLAN并划分接口** ```shell sysname L3-Switch # 命名设备 vlan batch 10 20 # 创建VLAN 10和20 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 # 将接口加入VLAN10 interface GigabitEthernet0/0/2 port link-type trunk port trunk allow-pass vlan 10 20 # 允许VLAN10/20通过[^2] ``` 2. **配置VLANIF三层接口** ```shell interface Vlanif10 ip address 192.168.10.1 255.255.255.0 # 设置VLAN10网关 interface Vlanif20 ip address 192.168.20.1 255.255.255.0 # 设置VLAN20网关[^1] ``` 3. **启用路由功能** ```shell ip route-static 0.0.0.0 0.0.0.0 192.168.100.254 # 配置默认路由(假设上行网关为192.168.100.254) ``` --- #### 三、进阶配置示例(DHCP中继) ```shell dhcp enable # 全局启用DHCP interface Vlanif10 dhcp select relay # 启用DHCP中继模式 dhcp relay server-ip 192.168.100.100 # 指定DHCP服务器地址[^2] ``` --- #### 四、验证命令 | 命令 | 作用 | |-----------------------|------------------------------| | `display vlan` | 查看VLAN划分状态 | | `display ip interface brief` | 检查三层接口IP配置 | | `display ip routing-table` | 验证路由表 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清霜辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值