我希望我的android布局行为如下: 假设SomeLayout是Widget1,Layout2和Widget2的父级,它们从上到下依次显示,如下所示:
|-------SomeLayout-------|
||--------Widget1-------||
||______________________||
||--------Layout2-------||
||______________________||
||--------Widget2-------||
||______________________||
|________________________|
这三个孩子的内容正在发生变化。动态地,当他们改变时,我总是希望具有最宽内容的那个包装到内容。我希望SomeLayout能够包裹那个最宽的孩子,我希望所有其他孩子能够匹配那个最宽的孩子。即使哪一个是最广泛的变化。
我一直在尝试使用比我能算的更多方法来实现这一目标。所有失败。有谁知道通过android布局XML实现这种效果?我愿意使用Java程序化解决方案,如果这是任何人都可以提供的,但我更愿意只通过XML来实现。
答案 0 :(得分:0)
我希望你的SomeLayout扩展ViewGroup,所以我试图覆盖onMeasure方法,以便以适当的方式测量所有的孩子。 例如
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int specWidth = MeasureSpec.getSize(widthMeasureSpec);
int maxWidth = 0;
int maxIndex = 0;
for (int i = 0; i < getChildCount(); i++){
View child = getChildAt(i);
final int widthSpec = MeasureSpec.makeMeasureSpec(
specWidth, MeasureSpec.UNSPECIFIED);
final int heightSpec = MeasureSpec.makeMeasureSpec(
0, MeasureSpec.UNSPECIFIED);
child.measure(widthSpec, heightSpec);
int width = child.getMeasuredWidth();
if (width > maxWidth){
maxWidth = width;
maxIndex = i;
}
}
for (int i = 0; i < getChildCount(); i++){
if (i != maxIndex){
View child = getChildAt(i);
final int widthSpec = MeasureSpec.makeMeasureSpec(
maxWidth, MeasureSpec.EXACTLY);
final int heightSpec = MeasureSpec.makeMeasureSpec(
0, MeasureSpec.UNSPECIFIED);
child.measure(widthSpec, heightSpec);
}
}
setMeasuredDimension(someMeasuredWidth, someMeasuredHeight);
}
因此,您应该定义最宽的孩子并测量所有其他孩子以调整最大尺寸。之后,您应该根据测量的维度在onLayout方法实现中布局所有子项。
希望它能帮到你
答案 1 :(得分:-1)
好问题伙伴。 开始检查后,我觉得这是一个很好的问题..
这就是你想要的......看看吧......
它只是一个简单的.. 将一些布局宽度应用于wrap_content,并将所有直接子宽度应用于match_parent ..
请参阅下面的示例..您可以使其符合背景颜色。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- This is Your Some Layout -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- Widget1 -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="2431234vb sset " />
<!-- Your Layout 2 (inner one) -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2431234v " />
</LinearLayout>
<!-- Widget2 -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="2431234vb sset " />
</LinearLayout>
</LinearLayout>
希望它会帮助你......