2011-10-07 180 views
139

如何向按鈕添加邊框?是否可以在不訴諸圖像的情況下做到這一點?Android - 按鈕邊框

+0

HTTP: //堆棧溢出。com/questions/7626554/android-draw-border-in-imageview/7626628#7626628 與此處相同的方式:) – asenovm

回答

305

第1步:創建文件名爲:my_button_bg.xml

步驟2:將此文件放在res/drawables.xml中

第3步:插入以下代碼

<?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> 

第4步:使用代碼「機器人:背景=」 @繪製/ my_button_bg」,其中下面需要時,如:

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

謝謝。+ 1爲此。將它保存到可繪製文件夾中作爲xml文件。我們如何使用它呢? –

+1

@AndroidPower你可以在R.drawable.FILE_NAME中使用它 – slayton

+2

這段代碼在按鈕標記的.axml代碼中出現在哪裏?它是否在styles.xml類型文件中? – theJerm

13

創建繪製/ 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" /> 
14

創建button_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> 

並添加按鈕,您的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" /> 
5

如果您的按鈕不需要透明背景,那麼您可以使用「框架佈局」創建邊框錯覺。只需調整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文件是否具有可動態編輯的邊框顏色。但我知道使用此解決方案,您可以通過設置FrameLayout背景來動態更改邊框的顏色。

1

在你的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" /> 

在繪製文件夾,創建按鈕的邊框樣式文件:

<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(); 
     } 
    });