使线性布局不退出屏幕

时间:2016-07-31 16:54:21

标签: android android-layout android-linearlayout

我对android和xml布局相当新。我一直试图制作应用程序,并且已经完成了编程位。但是我仍然坚持布局的最终​​确定。真的需要一只手。我的应用应该是这样的:

Layout

我将屏幕划分为4个线性布局,如下图所示:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.FirstVersion.android.cwd.Play"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@color/material_blue_grey_800">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnGoBack"
        android:text="Go Back"
        android:layout_weight="1"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Profile Information"
        android:background="@color/accent_material_dark"
        android:layout_weight="10" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/LDrawerAction"
        android:text="Menu"
        android:clickable="false"
        android:layout_weight="1"
        android:layout_marginRight="5dp"
        android:layout_marginLeft="5dp" />

</LinearLayout>

//endregion

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Section2"
android:orientation="vertical">

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/Section3"
android:orientation="horizontal">

    <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="5sp"
    android:textColor="@color/colorWhite"
    android:background="#990000"
    android:maxLines = "3"
    android:scrollbars = "vertical"
    android:id="@+id/txtSection3" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="15"
android:orientation="vertical"
android:baselineAligned="false">

    <TableLayout
    android:id="@+id/Section4"
    android:layout_width="match_parent"
    android:layout_weight="15"
    android:layout_height="wrap_content">

    </TableLayout>
</LinearLayout>

</LinearLayout>
</android.support.v4.widget.DrawerLayout>

现在的问题是,第二部分是以编程方式填充的,它的行数范围是8到14.对于列也是如此。每个块都是一个不同的按钮,我使用此代码添加:

Lay= (LinearLayout)findViewById(R.id.Section2);
for (int row = 0; row < numberOfRows; row++)
    {
        LinearLayout Linearrow = new LinearLayout(this);
        Linearrow.setOrientation(LinearLayout.HORIZONTAL);

        for (int column = 0; column < numberOfColumns; column++)
        {
            View a = Chosen.blocks[row][column]; //This is a View the extend Button that has no layout properties defined 

            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT,  1.0f);

            a.setLayoutParams(params);

            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
            lp.weight = 1.0f;
            Linearrow.addView(a, lp);
        }
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
        lp.weight = 1.0f;
        Lay.addView(Linearrow, lp);
    }

我甚至尝试使用TableLayout并将小图像指定为背景,因此可以使用以下代码调整其大小:

TL =(TableLayout)fa.findViewById(R.id.Section2);

    for (int i = 0; i < numberOfRows; i++)
    {
        TableRow tableRow = new TableRow(c);

        for(int j = 0; j < numberOfColumns; j++)
        {
            String s = T[(i * 10) + j];
            Block b = new Block(c, s);
            //int w = Math.round(c.getResources().getDisplayMetrics().density * 20);
            //int h = Math.round(c.getResources().getDisplayMetrics().density * 80);
            //b.setLayoutParams(new  TableRow.LayoutParams(w, h, 2.0f));

            b.setLayoutParams(new  TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
            b.setBackgroundResource(R.drawable.g_3);
            tableRow.addView(b);
            tableRow.setLayoutParams(new android.widget.LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 5f));

            final Block fb = b;
        }
        TL.addView(tableRow);
    }

当我运行应用程序时,我可以看到,除非我在大屏幕手机上打开它,内容不完全可见(就好像手动设置了布局的高度一样),并且因为它不是滚动 - 能够,内容不可见。如何重新排列或修改布局,使其如上图所示?

3 个答案:

答案 0 :(得分:0)

使用

 android:layout_weight

属性以线性布局的相等部分排列。 请参阅Link

答案 1 :(得分:0)

使用layout_weight

制作固定的布局高度
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.1"
        android:weightSum="12"
        android:orientation="horizontal"
        android:background="@color/material_blue_grey_800">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btnGoBack"
            android:text="Go Back"
            android:layout_weight="1"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Profile Information"
            android:background="@color/accent_material_dark"
            android:layout_weight="10" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/LDrawerAction"
            android:text="Menu"
            android:clickable="false"
            android:layout_weight="1"
            android:layout_marginRight="5dp"
            android:layout_marginLeft="5dp" />

    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.4"
        android:weightSum="1"
        android:id="@+id/Section2"
        android:orientation="vertical">

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.1"
        android:id="@+id/Section3"
        android:orientation="horizontal">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="5sp"
            android:textColor="@android:color/white"
            android:background="#990000"
            android:maxLines = "3"
            android:scrollbars = "vertical"
            android:id="@+id/txtSection3" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.4"
        android:weightSum="15"
        android:orientation="vertical"
        android:baselineAligned="false">

        <TableLayout
            android:id="@+id/Section4"
            android:layout_width="match_parent"
            android:layout_weight="15"
            android:layout_height="wrap_content">

        </TableLayout>
    </LinearLayout>

</LinearLayout>
</android.support.v4.widget.DrawerLayout>

在您动态添加视图的java类中,相应地计算子项的权重,如下所示

Lay= (LinearLayout)findViewById(R.id.Section2);
Lay.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int totalWidth = Lay.getMeasuredWidth();
float rowWeight = 1 / numberOfRows;
int columnWidth = totalWidth / numberOfColumns;
for (int row = 0; row < numberOfRows; row++)
{
    LinearLayout Linearrow = new LinearLayout(this);
    Linearrow.setOrientation(LinearLayout.HORIZONTAL);

    for (int column = 0; column < numberOfColumns; column++)
    {
        View a = Chosen.blocks[row][column]; //This is a View the extend Button that has no layout properties defined
        // height is determined by row's layout weight
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(columnWidth,
                LinearLayout.LayoutParams.MATCH_PARENT,  1.0f);

        a.setLayoutParams(params);
        Linearrow.addView(a);
    }
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
    lp.weight = rowWeight;
    Lay.addView(Linearrow, lp);
}

我没有对这些进行过测试,但只是在您运行此代码后可以解决的一些更改。

答案 2 :(得分:0)

最好在ScrollView内使用View。使用以下代码: -

 <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.FirstVersion.android.cwd.Play"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:background="@color/material_blue_grey_800">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btnGoBack"
            android:text="Go Back"
            android:layout_weight="1"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Profile Information"
            android:background="@color/accent_material_dark"
            android:layout_weight="10" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/LDrawerAction"
            android:text="Menu"
            android:clickable="false"
            android:layout_weight="1"
            android:layout_marginRight="5dp"
            android:layout_marginLeft="5dp" />

    </LinearLayout>

    //endregion
    <ScrollView 
android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/Section2"
    android:orientation="vertical">

    </LinearLayout>

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/Section3"
    android:orientation="horizontal">

        <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="5sp"
        android:textColor="@color/colorWhite"
        android:background="#990000"
        android:maxLines = "3"
        android:scrollbars = "vertical"
        android:id="@+id/txtSection3" />

    </LinearLayout>

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="15"
    android:orientation="vertical"
    android:baselineAligned="false">

        <TableLayout
        android:id="@+id/Section4"
        android:layout_width="match_parent"
        android:layout_weight="15"
        android:layout_height="wrap_content">

        </TableLayout>
    </LinearLayout>
    </LinearLayout>
</ScrollView>
    </LinearLayout>
    </android.support.v4.widget.DrawerLayout>