ConstraintLayout app:layout_constraintVertical_bias= app:layout_constraintHeight_percent= 关系

本文深入探讨了Android ConstraintLayout中百分比布局的使用技巧,包括app:layout_constraintVertical_bias和app:layout_constraintHeight_percent属性的相互作用,通过实例演示如何调整控件的垂直位置和高度占比。

有很多blog已经写的很详细了:

贴上他们的地址:

Android ConstraintLayout百分比布局-适配终结者(基本适配所有机型)

ConstraintLayout在项目中实践与总结

ConstraintLayout (约束布局)属性详情

所有基本的详情看上面的应该了解的差不多了,这里说的是:

app:layout_constraintVertical_bias="1"
app:layout_constraintHeight_percent="1"

他们之间的关系,我没有看过源码,只是测试出来的结果,如果有什么问题请评论;

先看button布局

<Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintHorizontal_bias="0.3"
            app:layout_constraintVertical_bias="0.3"
            app:layout_constraintHeight_percent="0.7"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>

贴上图:

app:layout_constraintHeight_percent="0.7"这里设置了0.7却没有用,因为我的android:layout_height="wrap_content"设置是wrap_content所有没有产生作用,继续

<Button
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            app:layout_constraintHorizontal_bias="0.3"
            app:layout_constraintVertical_bias="0.3"
            app:layout_constraintHeight_percent="0.7"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>

这里就起作用了。

不知道细心的有发现,上面设置了

app:layout_constraintHorizontal_bias="0.3"
app:layout_constraintVertical_bias="0.3"

当把

app:layout_constraintHeight_percent="0.7" android:layout_height="0dp"

之后没有在垂直率的位置,而是往上去了。那么继续app:layout_constraintHeight_percent="0.7"这个意思是根据父类的比例,这里设置的是0.7,意思就是占比7份。假如我把app:layout_constraintVertical_bias="0.3"这个设置成1,水平的不管,水平只和

android:layout_width="wrap_content"有关系
 <Button
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            app:layout_constraintHorizontal_bias="0.3"
            app:layout_constraintVertical_bias="1"
            app:layout_constraintHeight_percent="0.7"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>


不知道有没有看出什么结果没有,我的垂直率设置成1,button往下了,目测高度在7份左右,有可能不相信,那么再设置app:layout_constraintHeight_percent="0.5" 这里值是0.5了看看

<Button
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            app:layout_constraintHorizontal_bias="0.3"
            app:layout_constraintVertical_bias="1"
            app:layout_constraintHeight_percent="0.5"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>

button的高度居然只占一半了。

那么就说明一个问题,app:layout_constraintVertical_bias="1" app:layout_constraintHeight_percent="0.5"成对比关系了,如果垂直率设置成1的话,和父类高占比是成比例关系的,如果设置的是0.7,那么就是button的top 的高度和父类top的高度成7:3的关系 ,如果设置的是0.5,那么就是button的top 的高度和父类top的高度成5:5的关系 .

如果app:layout_constraintVertical_bias="0.3"这里不再是1,那么继续走起

<Button
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            app:layout_constraintHorizontal_bias="0.3"
            app:layout_constraintVertical_bias="0.5"
            app:layout_constraintHeight_percent="0.5"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>

和我预想的差不多,button根据父类设置的的高低是永不变的,一直都占5份,但高度缩上去了,仔细定睛一看,感觉缩短了app:layout_constraintVertical_bias="1"这个值的一半呢?好像是的,那么再试一试呢。

 <Button
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            app:layout_constraintHorizontal_bias="0.3"
            app:layout_constraintVertical_bias="0.1"
            app:layout_constraintHeight_percent="0.5"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>

感觉有那么一回事了,然后我设置不同的值,差不多的,虽然没有看过源码的实现,应该差距不大。

总结:

如果设置了

app:layout_constraintVertical_bias="0.1"
app:layout_constraintHeight_percent="0.5"

了这两个值,父类不为1的话,这两个成对比关系,如果bias = 1的话,就是5:5的关系,如果不为1的话就是1-percent的值的等比分量来算:比如上面这个,就是1-0.5 剩下5份,再5份里面分成10份,0.1占一份。ok到这里已经差不多了,写的不那么通俗易懂,自己测试一下有助于记忆。

现在代码如下:<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/surface_background"> <!-- 🔹 上方搜索栏容器 --> <LinearLayout android:layout_marginTop="?attr/actionBarSize" android:id="@+id/search_container" android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="8dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintWidth_percent="0.95" /> <!-- EditText 输入框 --> <EditText android:id="@+id/search_input" android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="1" android:hint="搜索公交站或线路" android:padding="12dp" android:background="@drawable/rounded_edittext" android:layout_marginEnd="8dp" android:inputType="text" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/search_btn" app:layout_constraintTop_toTopOf="@id/search_container" app:layout_constraintBottom_toBottomOf="@id/search_container" /> <!-- 搜索按钮 --> <Button android:id="@+id/search_btn" android:layout_width="wrap_content" android:layout_height="48dp" android:text="搜索" app:layout_constraintStart_toEndOf="@id/search_input" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/search_container" app:layout_constraintBottom_toBottomOf="@id/search_container" /> <!-- 🗺️ 地图视图:占页面中间 40% 高度 --> <com.amap.api.maps.MapView android:id="@+id/map_view" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/search_container" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHeight_percent="0.4" app:layout_constraintWidth="wrap_content" android:layout_marginTop="10dp" android:layout_marginHorizontal="16dp" /> <!-- 🔽 RecyclerView:结果列表,占据剩余空间 --> <androidx.recyclerview.widget.RecyclerView android:id="@+id/result_list" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/map_view" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/btn_go_to" app:layout_constraintVertical_bias="0" android:layout_marginTop="8dp" android:layout_marginHorizontal="16dp" /> <!-- “到这去”按钮:固定在底部上方 --> <Button android:id="@+id/btn_go_to" android:layout_width="0dp" android:layout_height="wrap_content" android:text="到这去" android:layout_margin="16dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> 我不知道控件和空间直接的距离能不能也按照百分比的样式显示出来
11-07
现在,代码修改如下:<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:background="@color/surface_background"> <!-- 🟡 左右安全边距 --> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.1" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_end" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.9" /> <!-- 🔝 顶部空隙:固定 48dp(比百分比更稳定) --> <Space android:layout_marginTop="48dp" android:id="@+id/space_top" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@id/app_name" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHeight_default="wrap" /> <!-- 🏷️ 软件名称 --> <TextView android:id="@+id/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="公交查询系统" android:textSize="28sp" android:textStyle="bold" android:textColor="#000" app:layout_constraintTop_toBottomOf="@id/space_top" app:layout_constraintBottom_toTopOf="@+id/space_10" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" /> <!-- 🔽 名称 → 副标题:拉开到 16dp --> <Space android:id="@+id/space_10" android:layout_width="0dp" android:layout_height="16dp" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintBottom_toTopOf="@id/subtitle" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- 🏷️ 副标题 --> <TextView android:id="@+id/subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Bus" android:textSize="18sp" android:textColor="#555" app:layout_constraintTop_toBottomOf="@id/space_10" app:layout_constraintBottom_toTopOf="@+id/space_11" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" /> <Space android:id="@+id/space_11" android:layout_width="0dp" android:layout_height="48dp" app:layout_constraintTop_toBottomOf="@id/image_bus" app:layout_constraintBottom_toTopOf="@id/subtitle" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- 🖼️ 图片:垂直居中 --> <ImageView android:id="@+id/image_bus" android:layout_width="0dp" android:layout_height="wrap_content" android:src="@drawable/bus" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintVertical_bias="0.5" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" app:layout_constraintWidth_percent="0.7" /> <!-- 🔽 图片 → 版本信息:自动连接,但不设高度 --> <!-- 🏷️ 版本信息:放在图片下方,预留间距 --> <TextView android:id="@+id/version_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="版本:1.0" android:textSize="16sp" android:textColor="#777" app:layout_constraintTop_toBottomOf="@id/image_bus" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" android:layout_marginTop="32dp" /> <!-- 🔽 版本 → 团队 --> <TextView android:id="@+id/team_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开发团队:white luminous" android:textSize="16sp" android:textColor="#777" app:layout_constraintTop_toBottomOf="@id/version_info" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" android:layout_marginTop="16dp" /> <!-- 📧 邮箱 --> <TextView android:id="@+id/email_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="邮箱:support@busapp.cn" android:textSize="16sp" android:textColor="#777" app:layout_constraintTop_toBottomOf="@id/team_info" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" android:layout_marginTop="12dp" /> <!-- 🏷️ 隐含标记 --> <TextView android:id="@+id/hao_marker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hao" android:textSize="8sp" android:textColor="#EEE" app:layout_constraintTop_toBottomOf="@id/email_info" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" android:layout_marginTop="24dp" /> </androidx.constraintlayout.widget.ConstraintLayout> 我希望主标题跟副标题相距16dp,然后副标题离中间图片的距离按照百分比来排列,图片在50%处,副标题我希望在25%处
11-07
我知道哪里有问题了,其实一开始的策略错了,我这个界面应该保持不动的,而item多应该在item那个框里面搞滑动,而不是整个界面无止境的滑动,目前你给的代码如下:<?xml version="1.0" encoding="utf-8"?> <androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:fitsSystemWindows="true" android:layout_marginTop="?attr/actionBarSize"> <!-- 根布局:ConstraintLayout,match_parent 高度 --> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 水平指南线 --> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_05" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.05" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_15" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.15" /> <!-- 55% 指南线:地图底部边界(15% + 40% = 55%) --> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_55" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.55" /> <!-- 95% 指南线(可选,用于对齐按钮等) --> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_95" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.95" /> <!-- 🔍 输入框 --> <EditText android:id="@+id/search_input" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="请输入需要查询的公交线路或站点" android:textColorHint="#777777" android:textColor="@color/black" android:background="@drawable/rounded_edittext" android:minHeight="48dp" android:textSize="16sp" android:padding="12dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/search_btn" app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintTop_toTopOf="@id/guideline_05" app:layout_constraintBottom_toTopOf="@id/space_after_search" android:layout_marginStart="16dp" android:layout_marginEnd="8dp" /> <!-- 🔎 搜索按钮 --> <Button android:id="@+id/search_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="搜索" app:layout_constraintTop_toTopOf="@id/guideline_05" app:layout_constraintBottom_toTopOf="@id/space_after_search" app:layout_constraintStart_toEndOf="@id/search_input" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp" /> <!-- ⬛ 搜索栏下方留白(8dp) --> <Space android:id="@+id/space_after_search" android:layout_width="match_parent" android:layout_height="8dp" app:layout_constraintTop_toBottomOf="@id/guideline_15" /> <!-- 🗺️ 地图视图:精确占屏幕 40% 高度 --> <com.amap.api.maps.MapView android:id="@+id/map_view" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/guideline_15" app:layout_constraintBottom_toTopOf="@id/space_after_map" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- ⬛ 地图与结果之间的空白(3% 高度) --> <Space android:id="@+id/space_after_map" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/map_view" app:layout_constraintBottom_toTopOf="@id/container_result_list" app:layout_constraintHeight_percent="0.03" /> <!-- 🔲 容器:包裹 RecyclerView 并限制最大高度 --> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/container_result_list" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/space_after_map" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/btn_go_to" app:layout_constraintHeight_max="300dp"> <!-- 🔽 实际的 RecyclerView --> <androidx.recyclerview.widget.RecyclerView android:id="@+id/result_list" android:layout_width="0dp" android:layout_height="0dp" android:background="@drawable/rounded_edittext" android:nestedScrollingEnabled="false" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- (可选)空状态提示 --> <TextView android:id="@+id/empty_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="暂无搜索结果" android:textColor="#999999" android:visibility="gone" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> <!-- “到这去”按钮 --> <Button android:id="@+id/btn_go_to" android:layout_width="0dp" android:layout_height="wrap_content" android:text="到这去" android:layout_margin="16dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/container_result_list" app:layout_constraintVertical_bias="0" /> <!-- 🌀 加载进度条 --> <ProgressBar android:id="@+id/progress_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:elevation="10dp" /> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.core.widget.NestedScrollView> 他的缺点是item那个框也无法滑动下去,只能显示这几个结果
最新发布
11-08
目前代码如下:<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:background="@color/surface_background"> <!-- 🟡 左右安全边距 --> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.1" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_end" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.9" /> <!-- 🔝 顶部空隙:12% --> <Space android:id="@+id/space_top" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@id/app_name" app:layout_constraintHeight_percent="0.12" /> <!-- 🏷️ 软件名称 --> <TextView android:id="@+id/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="公交查询系统" android:textSize="28sp" android:textStyle="bold" android:textColor="#000" app:layout_constraintTop_toBottomOf="@id/space_top" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" /> <!-- 🔽 名称 → 副标题:6% --> <Space android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintBottom_toTopOf="@id/subtitle" app:layout_constraintHeight_percent="0.06" /> <!-- 🏷️ 副标题 --> <TextView android:id="@+id/subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Bus" android:textSize="18sp" android:textColor="#555" app:layout_constraintTop_toBottomOf="@id/app_name" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" /> <!-- 🔽 副标题 → 图片:10% --> <Space android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/subtitle" app:layout_constraintBottom_toTopOf="@id/image_bus" app:layout_constraintHeight_percent="0.1" /> <!-- 🖼️ 图片 --> <ImageView android:id="@+id/image_bus" android:layout_width="0dp" android:layout_height="wrap_content" android:src="@drawable/bus" app:layout_constraintTop_toBottomOf="@id/subtitle" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" app:layout_constraintWidth_percent="0.7" /> <!-- 🔽 图片 → 版本:8% --> <Space android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/image_bus" app:layout_constraintBottom_toTopOf="@id/version_info" app:layout_constraintHeight_percent="0.08" /> <!-- 🏷️ 版本信息 --> <TextView android:id="@+id/version_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="版本:1.0" android:textSize="16sp" android:textColor="#777" app:layout_constraintTop_toBottomOf="@id/image_bus" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" /> <!-- 🔽 版本 → 团队:4% --> <Space android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/version_info" app:layout_constraintBottom_toTopOf="@id/team_info" app:layout_constraintHeight_percent="0.04" /> <!-- 🏷️ 开发团队 --> <TextView android:id="@+id/team_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开发团队:white luminous" android:textSize="16sp" android:textColor="#777" app:layout_constraintTop_toBottomOf="@id/version_info" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" /> <!-- 🔽 团队 → 邮箱:4% --> <Space android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/team_info" app:layout_constraintBottom_toTopOf="@id/email_info" app:layout_constraintHeight_percent="0.04" /> <!-- 📧 邮箱 --> <TextView android:id="@+id/email_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="邮箱:support@busapp.cn" android:textSize="16sp" android:textColor="#777" app:layout_constraintTop_toBottomOf="@id/team_info" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" /> <!-- 🔽 邮箱 → hao_marker:剩余空间自动撑开 --> <Space android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/email_info" app:layout_constraintBottom_toTopOf="@id/hao_marker" app:layout_constraintHeight_percent="0.14" /> <!-- 🏷️ 隐含标记 --> <TextView android:id="@+id/hao_marker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hao" android:textSize="8sp" android:textColor="#EEE" app:layout_constraintTop_toBottomOf="@id/email_info" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintEnd_toStartOf="@id/guideline_end" /> </androidx.constraintlayout.widget.ConstraintLayout> 他依旧是这些信息离得很近,导致下面非常的空,我希望标题位置不变,副标题跟标题间隔稍微拉开一点点,图片靠正中间,剩下那些靠下面
11-07
在 Android 开发中,`BottomSheetDialogFragment` 是一种常用于实现底部弹出面板的组件。为了在不同屏幕尺寸上实现响应式布局,可以使用 `ConstraintLayout` 提供的百分比布局特性,其中 `app:layout_constraintHeight_percent` 是一个非常有用的属性,它允许将视图的高度设置为父容器高度的百分比。 要在 `BottomSheetDialogFragment` 中使用 `app:layout_constraintHeight_percent`,首先需要确保其根布局是 `ConstraintLayout` 或其子类,例如 `CoordinatorLayout` 包裹的 `ConstraintLayout`。然后可以在子视图中设置 `app:layout_constraintHeight_percent` 属性以指定高度百分比,并将 `android:layout_height` 设置为 `0dp` 以启用百分比计算[^3]。 例如,若希望某个视图占据父容器高度的 50%,可以在 XML 布局文件中如下定义: ```xml <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:id="@+id/content_view" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintHeight_percent="0.5" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> ``` 在这个例子中,`View` 的高度将被设置为其父容器高度的 50%。此外,可以通过 `app:layout_constraintVertical_bias` 来调整视图在垂直方向上的对齐方式,例如设置为 `0` 表示顶部对齐,`1` 表示底部对齐[^4]。 需要注意的是,在某些情况下,`BottomSheetDialogFragment` 的行为可能会受到 `BottomSheetBehavior` 的影响,因此可能还需要调整 `BottomSheetBehavior` 的相关参数,例如 `setPeekHeight()` 或 `setHalfExpandedRatio()`,以确保百分比高度能够正确显示[^3]。 ### 代码示例:动态设置 BottomSheetDialogFragment 的高度 ```java @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); View bottomSheet = view.findViewById(R.id.design_bottom_sheet); if (bottomSheet != null) { BottomSheetBehavior<View> behavior = BottomSheetBehavior.from(bottomSheet); // 设置展开时的高度比例 behavior.setHalfExpandedRatio(0.5f); // 占用屏幕一半高度 behavior.setState(BottomSheetBehavior.STATE_HALF_EXPANDED); } } ``` 通过上述方式,可以灵活地控制 `BottomSheetDialogFragment` 内部视图的高度,从而实现更加适应不同屏幕的 UI 布局。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值