怎样才能让状态栏全屏而不用padding

问题描述 投票:0回答:1

我需要帮助,我正在尝试删除状态栏上的缩进,但我不知道该怎么做。

来自 SystemUI.apk 的 statusbar.xml

<?xml version="1.0" encoding="utf-8"?>
<com.android.systemui.statusbar.phone.PhoneStatusBarView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
    android:orientation="vertical"
    android:id="@+id/status_bar"
    android:focusable="false"
    android:descendantFocusability="afterDescendants"
    android:layout_width="match_parent"
    android:layout_height="@dimen/status_bar_height"
    android:accessibilityPaneTitle="@string/status_bar">
    <ImageView
        android:id="@+id/notification_lights_out"
        android:paddingBottom="2dp"
        android:visibility="gone"
        android:layout_width="@dimen/status_bar_icon_size"
        android:layout_height="match_parent"
        android:src="@drawable/ic_sysbar_lights_out_dot_small"
        android:scaleType="center"
        android:paddingStart="@dimen/status_bar_padding_start"/>
    <LinearLayout
        android:orientation="horizontal"
        android:id="@+id/status_bar_contents"
        android:paddingTop="@dimen/status_bar_padding_top"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingStart="@dimen/status_bar_padding_start"
        android:paddingEnd="@dimen/status_bar_padding_end">
        ... FullCode in pastebin https://pastebin.com/RrDyxhQ0 ...
    </LinearLayout>
</com.android.systemui.statusbar.phone.PhoneStatusBarView>

我已经重新绘制了对象以尝试找出边距的设置位置。
这就是它的样子

resparam.res.hookLayout("com.android.systemui", "layout", "status_bar", new XC_LayoutInflated() {
    @Override
    public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable {
        FrameLayout status_bar = liparam.view.findViewById(
            liparam.res.getIdentifier("status_bar", "id", "com.android.systemui"));
        status_bar.setBackgroundColor(Color.RED);
        LinearLayout status_bar_contents = liparam.view.findViewById(
                liparam.res.getIdentifier("status_bar_contents", "id", "com.android.systemui"));
        status_bar_contents.setBackgroundColor(Color.GREEN);
}

我希望时间立即从头开始

android xml system statusbar
1个回答
0
投票

要使状态栏全屏显示而无需在 Android XML 布局中填充,您需要调整布局中元素的填充和边距,并可能修改 PhoneStatusBarView 的layout_height,以确保它跨越整个宽度和高度,如下所示需要。

  • 将 PhoneStatusBarView 高度设置为 match_parent:如果您希望 PhoneStatusBarView 跨越屏幕的整个高度,请将其布局高度调整为 match_parent。

  • 从子视图中删除填充:确保状态栏中的所有子视图的填充和边距设置为零或根据需要设置以避免额外的空间。

  • 调整布局宽度和高度:如果您希望 PhoneStatusBarView 及其子项占据完整空间,请验证它们的layout_width和layout_height是否设置为match_parent。

以下是您如何根据以下步骤修改 XML 代码:

<?xml version="1.0" encoding="utf-8"?>
<com.android.systemui.statusbar.phone.PhoneStatusBarView 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
android:orientation="vertical"
android:id="@+id/status_bar"
android:focusable="false"
android:descendantFocusability="afterDescendants"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:accessibilityPaneTitle="@string/status_bar">
<ImageView
    android:id="@+id/notification_lights_out"
    android:visibility="gone"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_sysbar_lights_out_dot_small"
    android:scaleType="center"
    android:padding="0dp"/>
<LinearLayout
    android:orientation="horizontal"
    android:id="@+id/status_bar_contents"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="0dp">
    <!-- Your other child views here -->
</LinearLayout>
</com.android.systemui.statusbar.phone.PhoneStatusBarVie>
  • 确保父布局允许全屏:如果您的 PhoneStatusBarView 位于另一个布局内,请确保父布局也允许全屏宽度和高度。

  • 状态栏高度:如果您特别需要状态栏一定的高度,可以相应调整layout_height。如果你想让它覆盖整个高度,match_parent就足够了。

  • 系统 UI 调整:请注意,直接修改状态栏可能会对系统行为产生影响。如果您正在处理自定义 ROM 或系统修改,请务必进行彻底测试。

© www.soinside.com 2019 - 2024. All rights reserved.