layout_weight 模拟器与 Android Studio 渲染器不一致
Inconsistent layout_weight in simulator vs Android Studio renderer
下面是 XML 代码和屏幕截图。
摘要:
- 一个 parent 线性布局
weightSum
= 100
- 一个 child 线性布局
layout_weight
= 25
- 一个 child 线性布局
layout_weight
= 75
结果:
- 在 Android Studio 布局渲染器中 children 比例正常 (25:75)
在模拟器中children之间的比例是不OK(显然不是25:75)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="100">
<LinearLayout
android:background="@color/md_orange_600"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="25"
android:layout_gravity="center_horizontal">
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_margin="@dimen/default_separator"
android:background="@color/md_green_400"
android:layout_weight="75">
</LinearLayout>
</LinearLayout>
一些注意事项:
layout_height
在两个 children 上都是 0dp(这是权重的推荐值)
- 我对背景进行了着色,以便可以看到区域分配
找到根本问题:
原来我的主要活动布局有一个 CoordinatorLayout
作为主要容器。
CoordinatorLayout
像 FrameLayout
那样放置子项,因此我的 AppBarLayout
和主要片段容器 (FrameLayout
) 重叠了。
我只是将它们都包含在垂直方向 LinearLayout
中,现在它们不重叠了。
推论,我对开发人员的 2 美分:在不了解问题真正原因的情况下绕过问题很诱人(我可以在我的片段上添加 layout_marginTop
到 "shift it down")但是在最后,一个接一个地绕过你最终对你自己的应用程序的了解越来越少。始终了解您遇到的问题的真正原因,那么解决方案也将是真实的。
下面是 XML 代码和屏幕截图。
摘要:
- 一个 parent 线性布局
weightSum
= 100 - 一个 child 线性布局
layout_weight
= 25 - 一个 child 线性布局
layout_weight
= 75
结果:
- 在 Android Studio 布局渲染器中 children 比例正常 (25:75)
在模拟器中children之间的比例是不OK(显然不是25:75)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="100"> <LinearLayout android:background="@color/md_orange_600" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="25" android:layout_gravity="center_horizontal"> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_gravity="center_horizontal" android:layout_margin="@dimen/default_separator" android:background="@color/md_green_400" android:layout_weight="75"> </LinearLayout> </LinearLayout>
一些注意事项:
layout_height
在两个 children 上都是 0dp(这是权重的推荐值)- 我对背景进行了着色,以便可以看到区域分配
找到根本问题:
原来我的主要活动布局有一个 CoordinatorLayout
作为主要容器。
CoordinatorLayout
像 FrameLayout
那样放置子项,因此我的 AppBarLayout
和主要片段容器 (FrameLayout
) 重叠了。
我只是将它们都包含在垂直方向 LinearLayout
中,现在它们不重叠了。
推论,我对开发人员的 2 美分:在不了解问题真正原因的情况下绕过问题很诱人(我可以在我的片段上添加 layout_marginTop
到 "shift it down")但是在最后,一个接一个地绕过你最终对你自己的应用程序的了解越来越少。始终了解您遇到的问题的真正原因,那么解决方案也将是真实的。