0

我正在尝试将按钮的边距设置为 0,(因此按钮之间没有间距)。

基本上,我希望我的按钮看起来像这样(具有以下样式和颜色):

在此处输入图像描述

知道如何完成这种任务吗?我不想自己创建一个 9 补丁图像(因为我对此一无所知)。

4

2 回答 2

8

在这种特定情况下,您可以使用 XML 轻松完成此任务。这是您可以通过两个步骤实现它的方法:

第1步

在drawable文件夹中创建3个形状:

  • 第一个形状用于左按钮:shape_button_left.xml。此形状具有径向左角和渐变背景。

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <stroke
            android:width="1dp"
            android:color="#BFBFBF" >
        </stroke>
    
        <corners
            android:bottomLeftRadius="10dp"
            android:topLeftRadius="10dp" >
        </corners>
    
        <gradient android:startColor="#D2D2D2" android:endColor="#F2F2F2" android:angle="90"/>
    
    </shape>
    
  • 第二个形状用于中心按钮:shape_button_center.xml。这个形状没有定义任何角落,也有渐变背景。

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <stroke
            android:width="1dp"
            android:color="#BFBFBF" >
        </stroke>
    
        <gradient android:startColor="#D2D2D2" android:endColor="#F2F2F2" android:angle="90"/>
    
    </shape>
    
  • 第三个形状用于右键:shape_button_right.xml。此形状具有径向右角和渐变背景。

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <stroke
            android:width="1dp"
            android:color="#BFBFBF" >
        </stroke>
    
        <corners
            android:bottomRightRadius="10dp"
            android:topRightRadius="10dp" >
        </corners>
    
        <gradient android:startColor="#D2D2D2" android:endColor="#F2F2F2" android:angle="90"/>
    
    </shape>
    

第2步

现在,我们可以在简单的视图中使用这些形状来获得按钮的效果。在您的布局 XML 中添加以下代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >

    <!-- Button Left -->

    <LinearLayout
        android:id="@+id/button_left"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_button_left"
        android:gravity="center"
        android:padding="10dp" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Left"
            android:textColor="#333333"
            android:textSize="20sp" />
    </LinearLayout>
    <!-- End Button Left -->


    <!-- Button Center -->

    <LinearLayout
        android:id="@+id/button_center"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_button_center"
        android:gravity="center"
        android:padding="10dp" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Center"
            android:textColor="#333333"
            android:textSize="20sp" />
    </LinearLayout>
    <!-- End Button Center -->


    <!-- Button Right -->

    <LinearLayout
        android:id="@+id/button_right"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:background="@drawable/shape_button_right"
        android:gravity="center"
        android:padding="10dp" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Right"
            android:textColor="#333333"
            android:textSize="20sp" />
    </LinearLayout>
    <!-- End Button Right -->

</LinearLayout>

就是这样 现在,您可以在代码中将 onClick 侦听器添加到 LinearLayouts 并像按钮一样使用它。


在我的手机上测试这段代码会得到下一个结果: 在此处输入图像描述

于 2012-12-07T22:28:49.140 回答
1

知道如何完成这种任务吗?我不想自己创建一个 9 补丁图像(因为我对此一无所知)。

恐怕你可能没有太多选择。每个按钮之间的固有间距是直接内置到框架使用的现有 9-patch 背景中的额外透明像素的结果。要替换此行为,您必须将按钮的背景设置为Drawable不包含此固有间距的不同背景。

另一个可以在代码中完成的选项是创建 XML 可绘制形状以用于每个背景。您可以创建一个单独的形状,该形状具有圆角半径、填充渐变和笔触,就像您的图像一样。您可以在文档中阅读有关创建XML Drawable 的更多信息。

于 2012-12-07T21:47:04.997 回答