LinearLayout横向布局如何让控件垂直居中
时间: 2024-10-10 16:11:33 浏览: 44
在LinearLayout中实现控件的水平布局并使其垂直居中,通常需要配合Gravity属性或者自定义ViewGroup。以下是两种常见的方法:
1. **使用Gravity**:
如果你是想让所有直接添加到LinearLayout的子视图都垂直居中,可以在LinearLayout的`android:layout_gravity="center_vertical"`属性上设置为"center_vertical"。例如:
```xml
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<!-- 子视图 -->
</LinearLayout>
```
2. **自定义ViewGroup** 或者使用 `android:clipToPadding="false"` 和 `android:paddingTop="..." paddingBottom="..."`:
如果你想对特定的一个子视图进行居中,可以创建一个自定义的ViewGroup,比如MyVerticalLayout,然后在onMeasure()方法里调整子视图的高度,并设置顶部和底部的padding。
```java
public class MyVerticalLayout extends LinearLayout {
public MyVerticalLayout(Context context) {
super(context);
}
//...
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int desiredHeight = MeasureSpec.getSize(heightMeasureSpec); // 获取可用高度
setMeasuredDimension(getMeasuredWidth(), desiredHeight); // 设置测量尺寸
// 自动计算padding以便于子视图居中
int totalPadding = (desiredHeight - getMeasuredHeight()) / 2;
if (totalPadding > 0) {
setPadding(0, totalPadding, 0, totalPadding);
}
}
}
```
将这个自定义的ViewGroup用于包含垂直居中的子视图。
阅读全文