Android – button的边框

如何将边框添加到button? 是否有可能做到这一点,而不诉诸使用图像?

你可以定义你的button作为一个形状,因为dymmeh指出。 要给它一个边框,使用<stroke>元素(命名文件my_button_bg.xml并将其放置在res / drawables中):

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#FFFFFF" android:endColor="#00FF00" android:angle="270" /> <corners android:radius="3dp" /> <stroke android:width="5px" android:color="#000000" /> </shape> 

然后使用这样的文件:

 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Your Text" android:background="@drawable/my_button_bg" /> 

请看这里关于创build一个可绘制的形状http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

一旦你完成了这个,在你的button的XML设置android:background="@drawable/your_button_border"

创builddrawable / button_green.xml:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#003000" android:centerColor="#006000" android:endColor="#003000" android:angle="270" /> <corners android:radius="5dp" /> <stroke android:width="2px" android:color="#007000" /> </shape> 

并将其指出为@drawable/button_green

 <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:background="@drawable/button_green" android:text="Button" /> 

在drawable文件夹中创buildbutton_border.xml文件。

RES /抽拉/ button_border.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#FFDA8200" /> <stroke android:width="3dp" android:color="#FFFF4917" /> </shape> 

并添加button到您的XML活动布局,并设置背景android:background="@drawable/button_border"

  <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button_border" android:text="Button Border" /> 

我知道它晚了一年左右,但你也可以创build一个9path的图像有一个工具,与android SDK来帮助创build这样的图像请参阅此链接: http : //developer.android.com/tools/help/draw9patch html的

PS:图像也可以无限缩放

如果您的button不需要透明背景,那么您可以使用“框架布局”创build边框的幻觉。 只要调整FrameLayout的“填充”属性来改变边框的粗细。

 <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="1sp" android:background="#000000"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Your text goes here" android:background="@color/white" android:textColor="@color/black" android:padding="10sp" /> </FrameLayout> 

我不知道如果形状XML文件具有dynamic可编辑的边框颜色。 但是我知道用这个解决scheme,你可以通过设置FrameLayout背景dynamic地改变边框的颜色。

在你的XML布局中:

 <Button android:id="@+id/cancelskill" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="25dp" android:layout_weight="1" android:background="@drawable/button_border" android:padding="10dp" android:text="Cancel" android:textAllCaps="false" android:textColor="#ffffff" android:textSize="20dp" /> 

在drawable文件夹中,为button的边框样式创build一个文件:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <stroke android:width="1dp" android:color="#f43f10" /> </shape> 

而在你的活动中:

  GradientDrawable gd1 = new GradientDrawable(); gd1.setColor(0xFFF43F10); // Changes this drawbale to use a single color instead of a gradient gd1.setCornerRadius(5); gd1.setStroke(1, 0xFFF43F10); cancelskill.setBackgroundDrawable(gd1); cancelskill.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { cancelskill.setBackgroundColor(Color.parseColor("#ffffff")); cancelskill.setTextColor(Color.parseColor("#f43f10")); GradientDrawable gd = new GradientDrawable(); gd.setColor(0xFFFFFFFF); // Changes this drawbale to use a single color instead of a gradient gd.setCornerRadius(5); gd.setStroke(1, 0xFFF43F10); cancelskill.setBackgroundDrawable(gd); finish(); } });