我正在尝试将按钮的边距设置为0,(因此按钮之间没有间距)。
基本上,我希望我的按钮看起来像那样(具有以下样式和颜色):
任何想法我怎么能完成这样的任务?我不想自己创建一个9补丁图像(因为我没有任何知识这样做)。
答案 0 :(得分:8)
在这种特定情况下,您可以使用XML轻松完成此任务。 这是你可以通过两个步骤实现它的方法:
在可绘制文件夹中创建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>
现在,我们可以在简单的视图中使用这些形状来获得按钮的效果。 在您的布局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,并像按钮一样使用它。
在我的手机上测试此代码会产生下一个结果:
答案 1 :(得分:1)
任何想法我怎么能完成这样的任务?我不想自己创建一个9补丁图像(因为我没有任何知识这样做)。
我担心你可能没有多少选择。每个按钮之间的固有间距是由于框架使用的现有9补丁背景中直接构建的额外透明像素的结果。要替换此行为,您必须将按钮的背景设置为不包含此固有间距的其他Drawable
。
可以在代码中完成的另一个选项是创建用于每个背景的XML可绘制形状。您可以创建具有角半径,填充渐变和笔划的单个形状,就像您的图像一样。您可以阅读有关创建XML Drawables in the docs的更多信息。