gpt4 book ai didi

android - wrap_content 高度,但限制为父级的一半

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:10 25 4
gpt4 key购买 nike

我想要的是具有垂直排列的 2 个 View 的布局。让我们将顶部 View 称为 A 并将底部 View 称为 B。我希望给 B 的高度量是其正常高度(即包装内容),但我不希望它的可用空间超过一半。 A 得到剩下的。

另一种表达方式是,A 应始终至少获得可用高度的 50%,而 B 应始终获得最多 50%。

我似乎找不到实现该目标的简单方法。我可以将两个布局高度都设置为 0 并赋予它们相等的权重,这使得它们始终都是 50%,但是如果 B 小于 50%,则应该只给予它需要的。

我能看到的唯一方法是为 A 或 B 使用自定义类并覆盖 onMeasure 以将高度限制为父级的 50%,但似乎应该有更简单的方法。

最佳答案

好的,我现在明白了。如果我理解正确的话,你想要这样:

if A > B -> do nothing 
if B > A & B > parent layout -> 50% to both of them
if B > A & B < parent layout -> A = parent layout - B

我必须在 onWindowFocusChanged 中完成所有操作,否则在 onCreate 中 View 的高度将返回 0。我使用 2 个 LinearLayouts 作为子布局来完成它,但您可以随心所欲。

我的 XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/parent_lay"
android:orientation="vertical"
android:layout_height="match_parent" >

//Layout A:
<LinearLayout
android:id="@+id/lay_1"
android:layout_width="match_parent"
android:background="@android:color/background_dark"
android:layout_height="10dp" >
</LinearLayout>
//Layout B:
<LinearLayout
android:id="@+id/lay_2"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#123456" >

</LinearLayout>

</LinearLayout>

主要 Activity :

public class MainActivity extends Activity {
LinearLayout parent_lay;
LinearLayout lay_1;
LinearLayout lay_2;
int parent_height;
int lay_1_height;
int lay_2_heigth;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
parent_lay = (LinearLayout) findViewById(R.id.parent_lay);
lay_1 = (LinearLayout) findViewById(R.id.lay_1);
lay_2 = (LinearLayout) findViewById(R.id.lay_2);
lay_1_height = lay_1.getHeight();
lay_2_heigth = lay_2.getHeight();
parent_height = parent_lay.getHeight();


if (lay_2.getHeight() > lay_1.getHeight()
&& lay_2.getHeight() > (parent_lay.getHeight() / 2)) {

lay_1.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, 0, 1));

lay_2.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, 0, 1));

} else if (lay_2.getHeight() < (parent_lay.getHeight() / 2)) {
lay_1.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, (parent_height - lay_2_heigth)));

}

}

}

例子:如果 A 是 60dp 并且 B 是 40dp:

enter image description here

如果 A 是 60dp 并且 B 是 400dp:

enter image description here

关于android - wrap_content 高度,但限制为父级的一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com