布局中的等距按钮

Posted

技术标签:

【中文标题】布局中的等距按钮【英文标题】:Evenly spaced button in Layout 【发布时间】:2011-06-14 12:43:23 【问题描述】:

我正在尝试制作 4 个按钮,在 android 的纵向视图中均匀分布。

空间应根据屏幕大小上下缩放,每个按钮和边框之间的空间相等。

我尝试使用线性布局、权重和布局重力,但我似乎无法将按钮垂直居中。

这是 Android 布局的错误吗?更有可能只有我。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_
android:layout_
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center"
>
<Button
android:id="@+id/btn_f"
android:layout_
android:layout_
android:text="btn_f"
>
</Button>
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center"
>
<Button
android:id="@+id/btn_b"
android:layout_
android:layout_
android:text="btn_b"
>
</Button>
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center"
>
<Button
android:id="@+id/btn_a"
android:layout_
android:layout_
android:text="btn_a"
>
</Button>
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center"
>
<Button
android:id="@+id/settings"
android:layout_
android:layout_
android:text="Settings"
>
</Button>
</LinearLayout>
</LinearLayout>

【问题讨论】:

【参考方案1】:

试试这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical"
    >
    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_weight="1"
        android:gravity="center"
        >
        <Button
            android:id="@+id/btn_f"
            android:layout_
            android:layout_
            android:text="btn_f"
            />
    </LinearLayout>
    <!-- etc -->
</LinearLayout>

与原始布局的变化是每个内部LinearLayout 的高度为零,重力(不是 layout_gravity)为中心。这应该会导致所有内部线性布局具有相同的高度,平均分割父级高度,而不会拉伸按钮本身。

【讨论】:

这种方式不起作用...但是如果您将layout_gravity和gravity都指定为中心,它就起作用了....肯定android xml界面的文档记录很差..... 应该是 android:layout_gravity="center" 而不是 android:gravity="center"。这里没有必要使用 android:gravity="center" 。重力标签影响其内容的定位,而 layout_gravity 影响其自身相对于其父项的定位。【参考方案2】:

试试这个:

 <LinearLayout         
  android:layout_         
  android:layout_         
  android:orientation="horizontal"         
  android:weightSum="1"         
  android:gravity="center">
     <Button             
        android:id="@+id/btn_f"    
        android:layout_ 
        android:layout_weight="0.5" 
        android:layout_      
        android:text="btn_f" />     
 </LinearLayout> 

这会将按钮设置为仅占据屏幕长度的一半。

【讨论】:

这会拉伸按钮。【参考方案3】:

您似乎将所有按钮包装在另一个 LinearLayout 中,而不是仅将它们保留在父 LinearLayout 中。

删除所有直接的LinearLayout,以便android:layout_weight 生效。


实现拉伸和间距

在按钮本身中使用android:layout_width="fill_parent" 为间距指定边距

【讨论】:

这只是简单地拉伸按钮...我希望按钮很小,周围有空间...每个都位于矩形的中心 指定边距是我想避免的...您需要放置一个尺寸,即使它处于倾斜状态,每个显示器的最终效果也不相同...不是有一个像重量一样的自动方式?

以上是关于布局中的等距按钮的主要内容,如果未能解决你的问题,请参考以下文章

自动布局问题

如何根据屏幕大小调整按钮的图像和文本大小(自动布局)

使用自动布局在屏幕上水平均匀分布按钮。它们之间的间距不相等

五个按钮保持等距的圆形旋转

WinForm窗体最小化后还原,里面的控件布局就乱了。 怎么解决?

新年寄语——等距螺旋中的中式思维