我是一个Android菜鸟,我正在试图弄清楚布局是如何工作的。尽管如此,还不能完全理解它。我在android studio中有一个活动,我希望在3行中显示6个图像按钮,对齐超过2个列。像这样:
___________________
| |
| button 1 button 2 |
| |
| button 3 button 4 |
| |
| button 5 button 6 |
|___________________|
我希望按钮和框架边缘之间的空间相同,以便按钮在整个屏幕上均匀显示。我尝试使用网格布局,但按钮要么粘在屏幕的一侧,要么保持彼此相邻。完成这项工作的最佳方法是什么?
到目前为止我的xml:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnCount="2"
android:rowCount="6">
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:id="@+id/button1"
android:background="@drawable/image1" />
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button2"
android:background="@drawable/image2"/>
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button3"
android:background="@drawable/image3"/>
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button4"
android:background="@drawable/image4"/>
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button5"
android:background="@drawable/image5"/>
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button6"
android:background="@drawable/image6"/>
</GridLayout>
问题2:
我给图像150dp的宽度和高度,以便图像的尺寸不会改变。如果我将它设置为match_parent,则图像会变形为不相等的宽度和高度。无论如何要使图像在没有设定高度和宽度的情况下正确缩放?
答案 0 :(得分:4)
您可以使用重量:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="3">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:weightSum="2">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_weight="1"
android:layout_gravity="center_vertical" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button2"
android:layout_weight="1"
android:layout_gravity="center_vertical" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:weightSum="2">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button3"
android:layout_weight="1"
android:layout_gravity="center_vertical" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button4"
android:layout_weight="1"
android:layout_gravity="center_vertical" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:weightSum="2">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button5"
android:layout_weight="1"
android:layout_gravity="center_vertical" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button6"
android:layout_weight="1"
android:layout_gravity="center_vertical" />
</LinearLayout>
</LinearLayout>
按钮的重量在视图中平均发生,如果要在按钮之间添加一些空间,则只需添加元素空间并为其指定权重。希望这个帮助
答案 1 :(得分:1)
android:layout_gravity
设置View
或Layout
的严重性
在其父母。您可以将android:layout_gravity = center
添加到GridLayout
,它会使网格居中。
android:gravity
设置View
内容的严重性
用于。因此您可以向android:gravity = center
添加GridLayout
之类的内容,并将其元素集中在其中。
并且对于不粘的按钮,您可以为每个ImageButton
f.e添加填充。
android:paddingBottom="6dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:paddingTop="6dp"
答案 2 :(得分:1)
在 ImageButton 布局中设置 android:layout_gravity = right 。
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnCount="2"
android:rowCount="6">
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:id="@+id/button1"
android:background="@drawable/date"
android:layout_marginLeft="30dp"
/>
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button2"
android:background="@drawable/date"
android:layout_gravity="right"
android:layout_marginRight="30dp"/>
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button3"
android:background="@drawable/date"
android:layout_marginLeft="30dp"/>
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button4"
android:background="@drawable/date"
android:layout_gravity="right"
android:layout_marginRight="30dp"/>
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button5"
android:background="@drawable/date"
android:layout_marginLeft="30dp"/>
<ImageButton
android:layout_width="150dp"
android:layout_height="150dp"
android:text="New Button"
android:id="@+id/button6"
android:background="@drawable/date"
android:layout_gravity="right"
android:layout_marginRight="30dp"/>