原生Android:动态创建具有相等宽度按钮的网格状可滚动布局

时间:2015-12-26 12:56:27

标签: android android-layout

我正在尝试根据这张照片创建一个布局(paint'ed)。

Layout Design

目标级别是API 17.这必须以编程方式创建,而不是使用XML。这必须是响应式设计。

我在stackoverflow上广泛研究并尝试了其他部分类似的情况,使用GridLayout,TableLayout,GridView,各种布局参数,重力,权重,视图嵌套等。但是,

(a)根据设备屏幕尺寸和方向,我无法获得文本按钮宽度以填充可用宽度不动产。文本较短的按钮宽度较短。

(b)加号,减号和数字按钮具有固定的高度和宽度,与屏幕尺寸和方向无关。但是它们没有与同一行左侧的文本按钮对齐。只有底部的几个像素可见。

我很感激任何可以实现上述布局的代码段。万分感谢。

更新:

根据@ tiny-sunlight的输入,我做到了这一点。接下来,我将以编程方式重新创建。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/layoutTable"
        android:padding="5dp"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:id="@+id/layoutRow"
            android:padding="5dp"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <Button
                android:layout_marginEnd="10dp"
                android:layout_weight="17"
                android:text="This is my button"
                android:textSize="15sp"
                android:textAllCaps="false"
                android:gravity="start"
                android:layout_width="0dp"
                android:layout_height="40dp" />
            <Button
                android:layout_marginEnd="5dp"
                android:layout_weight="1"
                android:text="-"
                android:textSize="15sp"
                android:textStyle="bold"
                android:layout_width="40dp"
                android:layout_height="40dp" />
            <TextView
                android:layout_marginEnd="5dp"
                android:layout_weight="1"
                android:layout_marginTop="0dp"
                android:paddingTop="10dp"
                android:text="0"
                android:textSize="15sp"
                android:gravity="center"
                android:layout_width="40dp"
                android:layout_height="40dp" />
            <Button
                android:layout_weight="1"
                android:text="+"
                android:textSize="15sp"
                android:textStyle="bold"
                android:layout_width="40dp"
                android:layout_height="40dp" />
        </LinearLayout>
    </LinearLayout>
</ScrollView>

2 个答案:

答案 0 :(得分:0)

您可以使用回收站视图,它将为您提供滚动选项和动态绑定视图。

因此,将线性布局(方向水平)加载到回收器视图中。现在,对于布局,它变得更容易。你需要一个textview,button,textview,button。 对于每个textview和button,分别设置widht = 0dp和weight为7,1,1,1,即你最左边的textview占据宽度的70%而其他所有占据10%。显然,您可以根据您的要求更改这些重量。这就是布局。

现在只需使用适配器填充数据。

答案 1 :(得分:0)

尝试以编程方式构建布局。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:padding="5dp"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:padding="5dp"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <Button
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:text="1111"
                android:layout_width="0dp"
                android:layout_height="40dp" />
            <ImageView
                android:layout_marginRight="5dp"
                android:src="@mipmap/ic_launcher"
                android:layout_width="40dp"
                android:layout_height="40dp" />
            <TextView
                android:layout_marginRight="5dp"
                android:background="#44bb11"
                android:layout_marginTop="0dp"
                android:paddingTop="10dp"
                android:text="11"
                android:layout_width="40dp"
                android:layout_height="40dp" />
            <ImageView
                android:src="@mipmap/ic_launcher"
                android:layout_width="40dp"
                android:layout_height="40dp" />
        </LinearLayout>
    </LinearLayout>
</ScrollView>