如何在下面创建一个带有textview的按钮网格

时间:2013-11-19 20:24:43

标签: android android-layout

enter image description here

您好,

我想创建一个像上面(试图)绘制的屏幕。 A,b,c,d,e,f,g和h为buttons,p为EditText

现在我想要完成的是,当部署在更大或更小的屏幕上或旋转时,会发生以下情况:

  • 元素'p'保持相同的高度但水平尺寸(得到 更宽/更小)
  • 元素a-h(按钮)全部水平尺寸 垂直。因此,当屏幕变宽两倍时,按钮就是 宽两倍,当它高两倍时,按钮是两倍 高。

我已经能够创建一行水平尺寸的按钮(lineairlayoutandroid:layout_weight,但我没有进一步。

4 个答案:

答案 0 :(得分:2)

这是一个有效的解决方案:

根据需要设置EditText高度。

<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="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="40dp" />

</LinearLayout>

答案 1 :(得分:2)

尝试一下,希望它有效:

<?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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp" />

</LinearLayout>

答案 2 :(得分:1)

一个快速的解决方案是使用嵌套布局和嵌套权重。这方面的一个例子可能是:

<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="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />
    </LinearLayout>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

但是,不建议使用嵌套权重,因为它们的计算量很大。替代(高级)布局可以基于相对布局来替换嵌套的LinearLayouts及其权重。隐藏的中心组件用于将相对布局拆分为两个。下面发布了一个例子:

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

       <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <!--  Hidden center view used to split relative layout in half -->
        <View
            android:id="@+id/hiddenView1"  
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_centerInParent="true"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toLeftOf="@id/hiddenView1" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toRightOf="@id/hiddenView1" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >
    <!--  Hidden center view used to split relative layout in half -->
        <View
            android:id="@+id/hiddenView2"  
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_centerInParent="true"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toLeftOf="@id/hiddenView2" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toRightOf="@id/hiddenView2" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >
    <!--  Hidden center view used to split relative layout in half -->
        <View
            android:id="@+id/hiddenView3"  
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_centerInParent="true"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toLeftOf="@id/hiddenView3" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toRightOf="@id/hiddenView3" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >
    <!--  Hidden center view used to split relative layout in half -->
        <View
            android:id="@+id/hiddenView4"  
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_centerInParent="true"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toLeftOf="@id/hiddenView4" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toRightOf="@id/hiddenView4" />
    </RelativeLayout>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout> 

使用RelativeLayout的解决方案的灵感来自DeeV在这个SO问题中的答案:Making two LinearLayouts have 50% of the screen each without using layout_weight

如果您想避免在布局膨胀时显示软键盘,您可以对您的父级LinearLayout执行以下操作:

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

答案 3 :(得分:1)

// try this
<?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:padding="5dp"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">

            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:text="a"
                android:layout_weight="1"/>
            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginLeft="5dp"
                android:text="b"
                android:layout_weight="1"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_marginTop="5dp"
            android:layout_weight="1"
            android:layout_height="0dp">

            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:text="c"
                android:layout_weight="1"/>
            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginLeft="5dp"
                android:text="d"
                android:layout_weight="1"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_marginTop="5dp"
            android:layout_weight="1"
            android:layout_height="0dp">

            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:text="e"
                android:layout_weight="1"/>
            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginLeft="5dp"
                android:text="f"
                android:layout_weight="1"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_marginTop="5dp"
            android:layout_weight="1"
            android:layout_height="0dp">

            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:text="g"
                android:layout_weight="1"/>
            <Button
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_marginLeft="5dp"
                android:text="h"
                android:layout_weight="1"/>
        </LinearLayout>
    </LinearLayout>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:hint="p"/>
</LinearLayout>