如何创建最小和最大高度的布局?

时间:2014-04-28 15:54:10

标签: android xml android-layout user-interface android-linearlayout

我有两个布局layout1和layout2采用线性布局,垂直重力 我的标准布局1高度例如是300dp(小型显示器的高度很高)。

在小型显示器中,这几乎占据了所有视图高度。但我想将layout1的最大高度设为视图的50%。

如果我在大显示屏中设置所有高度视图的高度的50%,我会有一些损失空间 enter image description here
如果我在小显示器中设置高度300dp,我只有layout1 enter image description here
所以我必须限制layout1高度,小型显示器的重量为50%,大型显示器的dpi为300dp 如何将此限制设置为layout1。

3 个答案:

答案 0 :(得分:2)

在运行时,您可以确定LinearLayout1占用多少空间,并仅在屏幕占用一半以上时调整其高度。为此,请使用以下代码。

假设您已将LinearLayout1的ID设为R.id.LL1,然后使用此代码,您可以要求android将LL1的高度调整为50%

int screenHeight, screenWidth;

//Code to determine screen's height and width.

Display display = getWindowManager.getDefaultDisplay();
if (android.os.Build.Version.SDK_INT>=13) {
    Point size = new Point();
    display.getSize(size);
    screenHeight = size.x;
    screenWidth = size.y;
}
else {
    screenWidth = display.getWidth();
    screenHeight = display.getHeight();
}


LinearLayout ll = (LinearLayout) findViewById(R.id.LL1);

int layoutHeight = ll.getLayoutParams().height; // gets layout's height

if ((layoutHeight * 2) > screenHeight) { 

    // true when LL1 takes more than half of screen, good time to set it back to 50% height

    ll.getLayoutParams().height = screenHeight/2;
    ll.requestLayout(); //Forces layout to be adjusted.
}

else {
//All good, no work required, so skip this else block
}

答案 1 :(得分:1)

你知道weigth吗?

如果你想要2个布局(L1 50%)(L2 50%)高度,请使用:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"
    android:weightSum="1"
    >
        <LinearLayout 
        android:orientation="horizontal"
        android:layout_height="0dp"
        android:layout_weight=".5"
        android:layout_width="match_parent"
         >
    </LinearLayout>

        <LinearLayout 
        android:orientation="horizontal"
        android:layout_height="0dp"
        android:layout_weight=".5"
        android:layout_width="match_parent"
         >
    </LinearLayout>
</LinearLayout>

如果您想要屏幕尺寸(大,小)的差异百分比,请为每个xml创建另一个名称相同但权重不同的xml。

示例:res/layout-large/activity_main.xmlres/layout-small/activity_main.xml仅更改权重。

更多信息:http://developer.android.com/guide/practices/screens_support.html

答案 2 :(得分:0)

我通过将ScrollView的高度与屏幕宽度进行比较(可以根据您的要求与高度进行比较)来解决此问题:

if (myScrollView.getHeight > ((int)(screenWidth * 0.8))) {

    myScrollView.getLayoutParams().height = (int)(screenWidth * 0.85);

}

实际上我是动态添加视图的。一旦ScrollView的高度达到一定限度就固定了高度。

相关问题