【问题标题】:Equally spaced fixed size buttons Android等距固定大小按钮 Android
【发布时间】:2011-05-28 11:44:47
【问题描述】:

我有这个 xml 文档。我想让这些 93 x 93 像素的按钮图像等间距。目前,重量设置使它们伸展并相互拥抱,因此没有空间。但是,如果我将权重设置为 0,它们会互相拥抱,但会占据大约一半的屏幕。

顺便说一下,这是横向的。

    <LinearLayout android:id="@+id/LinearLayout" android:layout_height="wrap_content"
  android:layout_width="fill_parent">
   <Button 
    android:background="@drawable/a" 
    android:layout_height="93px" 
    android:id="@+id/a"
    android:layout_width="93px" 
    android:layout_weight="1" 
    android:layout_marginLeft="20dip" 
    android:layout_marginTop="30dip"/>
  <Button 
    android:background="@drawable/b" 
    android:layout_height="93px" 
    android:id="@+id/b"
    android:layout_width="93px" 
    android:layout_weight="1"  
    android:layout_marginTop="30dip"/>

  <Button 
    android:background="@drawable/c" 
    android:layout_height="93px" 
    android:id="@+id/c" 
    android:layout_weight="1" 
    android:layout_width="93px"  
    android:layout_marginTop="30dip"/>
  <Button 
    android:background="@drawable/d" 
    android:layout_height="93px" 
    android:id="@+id/d"
    android:layout_width="93px" 
    android:layout_weight="1" 
    android:layout_marginRight="20dip" 
    android:layout_marginTop="30dip" />
    </LinearLayout>

一个

【问题讨论】:

    标签: java android xml button


    【解决方案1】:

    解决方法很简单。

    您必须将每个按钮保持在单独的线性布局中,并为每个线性布局保持 weight=1。现在,无论分辨率或方向如何,按钮都将等距分布。

    前:-

          <LinearLayout android:id="@+id/LinearLayout" android:layout_height="wrap_content"
          android:layout_width="fill_parent">
          <LinearLayout android:id=@+id/Button1Parent" android:layout_height="wrap_content" android_width="wrap_content" android:weight="1" gravity="center">  
           <Button 
            android:background="@drawable/a" 
            android:layout_height="93px" 
            android:id="@+id/takequiz"
            android:layout_width="93px" 
            android:layout_weight="1" 
            android:layout_marginLeft="20dip" 
            android:layout_marginTop="30dip"/>
    </LinearLayout>
    <LinearLayout android:id=@+id/Button2Parent" android:layout_height="wrap_content" android_width="wrap_content" android:weight="1" gravity="center">
          <Button 
            android:background="@drawable/b" 
            android:layout_height="93px" 
            android:id="@+id/random"
            android:layout_width="93px" 
            android:layout_weight="1"  
            android:layout_marginTop="30dip"/>
    </LinearLayout>
    <LinearLayout android:id=@+id/Button3Parent" android:layout_height="wrap_content" android_width="wrap_content" android:weight="1" gravity="center">
    
          <Button 
            android:background="@drawable/c" 
            android:layout_height="93px" 
            android:id="@+id/search" 
            android:layout_weight="1" 
            android:layout_width="93px"  
            android:layout_marginTop="30dip"/>
    </LinearLayout>
    <LinearLayout android:id=@+id/Button4Parent" android:layout_height="wrap_content" android_width="wrap_content" android:weight="1" gravity="center">
    
          <Button 
            android:background="@drawable/d" 
            android:layout_height="93px" 
            android:id="@+id/browse"
            android:layout_width="93px" 
            android:layout_weight="1" 
            android:layout_marginRight="20dip" 
            android:layout_marginTop="30dip" />
            </LinearLayout>
    </LinearLayout>
    

    【讨论】:

      【解决方案2】:

      试试这个:

      <LinearLayout
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:background="#000000"
              android:id="@+id/linearLayout01"
              android:layout_height="wrap_content"
              android:layout_width="fill_parent"
              android:orientation="horizontal"
          >
              <Button
                  android:layout_width="0dp"
                  android:id="@+id/btn1"
                  android:layout_height="93px"
                  android:layout_weight="1"
                  android:layout_marginRight="5dp"
              ></Button>
              <Button
                  android:layout_width="0dp"
                  android:id="@+id/btn2"
                  android:layout_height="93px"
                  android:layout_weight="1"
                  android:layout_marginRight="5dp"
              ></Button>
              <Button
                  android:layout_width="0dp"
                  android:id="@+id/btn3"
                  android:layout_height="93px"
                  android:layout_weight="1"
                  android:layout_marginRight="5dp"
              ></Button>
              <Button
                  android:layout_width="0dp"
                  android:id="@+id/btn4"
                  android:layout_height="93px"
                  android:layout_weight="1"
              ></Button>
          </LinearLayout>
      

      【讨论】:

        【解决方案3】:

        LinearLayout 没有“等间距”的内在概念。您可以考虑使用专为“仪表板”设计的布局,例如 https://gist.github.com/882650

        【讨论】:

        • 感谢这看起来非常适合我遇到的另一个布局问题。如果您可以花一点时间简要解释如何实现这一点,那就太好了。将该文件放入我的 apk 后,我应该从那里做什么?
        • 你发给我的第一个链接我应该保存为 com.google.android.apps.iosched.ui.widget 以及我在 scr 下的所有其他包正确吗?
        • @Max:嗯,你需要保持一致。如果您将包单独留在 Java 类中,则它需要进入您的项目中的 src/com/google/android/apps/iosched/ui/widget/,您将在布局 XML 中将其称为 com.google.android.apps.iosched.ui.widget.DashboardLayout。如果您愿意,可以更改 Java 包,但您需要更改目录和布局以匹配。
        【解决方案4】:

        我尝试将您当前的 LinearLayout 更新为以下内容,并设置了均匀间隔的方形按钮 - 但它们不适合我的模拟器屏幕。所以在我的例子中,是你在左右两边设置的边距挤压了它们。

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:id="@+id/LinearLayout" 
           android:layout_height ="wrap_content"
           android:layout_width  ="fill_parent" 
           android:orientation   ="horizontal"
           android:layout_gravity="center_horizontal">
        
           <Button  
            android:id="@+id/takequiz"  
            android:text="take quiz"
            android:layout_height="93px"
            android:layout_width ="93px" 
            android:layout_marginTop ="30dip"/>
        
          <Button 
            android:id="@+id/random" 
            android:text="random"
            android:layout_height="93px" 
            android:layout_width ="93px" 
            android:layout_marginTop="30dip"/>
        
          <Button 
            android:id="@+id/search" 
            android:text="search"
            android:layout_height="93px"
            android:layout_width="93px" 
            android:layout_marginTop="30dip"/>
        
          <Button
            android:id="@+id/browse"
            android:text="browse"
            android:layout_height="93px" 
            android:layout_width="93px" 
            android:layout_marginTop="30dip" />
        
         </LinearLayout>
        

        您是否考虑过 2 行?我使用 TableLayout 为音板类型的应用程序做了类似的事情。虽然这些天我倾向于更多地使用RelativeLayout。这是表格代码。

        <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:id="@+id/LinearLayout" 
           android:layout_height ="fill_parent"
           android:layout_width  ="fill_parent" >
           <TableRow
              android:layout_height ="wrap_content"
              android:layout_width  ="fill_parent" 
              android:gravity       ="center">    
               <Button  
                android:id  ="@+id/takequiz"  
                android:text="take quiz"
                android:layout_height="93px"
                android:layout_width ="93px" />    
              <Button 
                android:id  ="@+id/random" 
                android:text="random"
                android:layout_height="93px" 
                android:layout_width ="93px" />
            </TableRow> 
            <TableRow
              android:layout_height ="wrap_content"
              android:layout_width  ="fill_parent" 
              android:gravity       ="center">    
                <Button 
                  android:id  ="@+id/search" 
                  android:text="search"
                  android:layout_height="93px"
                  android:layout_width ="93px" />       
                <Button
                  android:id  ="@+id/browse"
                  android:text="browse"
                  android:layout_height="93px" 
                  android:layout_width ="93px"  />
            </TableRow>
         </TableLayout>
        

        【讨论】:

        • 它不适合您的屏幕?你用的是什么尺寸的?你是在景观方向吗?如果是这样,我可能需要重新考虑布局。
        【解决方案5】:

        只需为任一按钮设置一个左边距或右边距

        【讨论】:

          猜你喜欢
          • 2016-07-31
          • 1970-01-01
          • 1970-01-01
          • 2017-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多