web-dev-qa-db-de.com

Abgerundeter Button in Android

Ich möchte abgerundete Schaltflächen in einem Android-Programm erstellen. Ich habe angesehen Wie erstelle ich EditText mit abgerundeten Ecken?

Was ich erreichen möchte, ist:

  1. Abgerundete Schaltflächen
  2. Ändern Sie den Hintergrund/das Aussehen der Schaltfläche in verschiedenen Status (wie Onclick, Focus)
  3. Verwenden Sie mein eigenes PNG als Hintergrund und erstellen Sie keine Form.
63
Arnab C.

Sie können eine Schaltfläche mit abgerundeten Ecken ausführen, ohne auf eine ImageView zurückzugreifen.

Eine Hintergrundauswahlressource button_background.xml

<?xml version="1.0" encoding="utf-8" ?> 
     <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
     <!--  Non focused states 
      --> 
      <item Android:state_focused="false" Android:state_selected="false" Android:state_pressed="false" Android:drawable="@drawable/button_unfocused" /> 
      <item Android:state_focused="false" Android:state_selected="true" Android:state_pressed="false" Android:drawable="@drawable/button_unfocused" /> 
     <!--  Focused states 
      --> 
      <item Android:state_focused="true" Android:state_selected="false" Android:state_pressed="false" Android:drawable="@drawable/button_focus" /> 
      <item Android:state_focused="true" Android:state_selected="true" Android:state_pressed="false" Android:drawable="@drawable/button_focus" /> 
     <!--  Pressed 
      --> 
      <item Android:state_pressed="true" Android:drawable="@drawable/button_press" /> 
    </selector>

Für jeden Zustand kann eine ziehbare Ressource, z. button_press.xml:

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle">
  <stroke Android:width="1dp" Android:color="#FF404040" /> 
  <corners Android:radius="6dp" /> 
  <gradient Android:startColor="#FF6800" Android:centerColor="#FF8000" Android:endColor="#FF9700" Android:angle="90" /> 
</shape>

Beachten Sie das corners-Attribut. Dadurch werden abgerundete Ecken erhalten!

Stellen Sie dann den Hintergrund auf die Schaltfläche ein:

Android:background="@drawable/button_background"

EDIT (9/2018) : Die gleiche Technik kann zum Erstellen einer kreisförmigen Schaltfläche verwendet werden. Ein Kreis ist eigentlich nur eine rechteckige Schaltfläche, deren Radiusgröße auf die Hälfte des Quadrats eingestellt ist

In dem obigen Beispiel sind stroke und gradient keine notwendigen Elemente, sondern lediglich Beispiele und Möglichkeiten, wie Sie die abgerundete Eckenform sehen können

113
CSmith

Wenn Sie in Android eine abgerundete Schaltfläche benötigen, erstellen Sie eine XML-Datei "RoundShapeBtn.xml" als Zeichenelement.

 <?xml version="1.0" encoding="utf-8"?>
  <shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" Android:padding="10dp">   
  <solid Android:color="#6E6E6E"/> <!-- this one is ths color of the Rounded Button -->
  <corners
   Android:bottomRightRadius="10dp"
   Android:bottomLeftRadius="10dp"
   Android:topLeftRadius="10dp"
   Android:topRightRadius="10dp"/>
</shape>

Fügen Sie dies Ihrem Tastencode hinzu:

Android:background="@drawable/RoundShapeBtn"
63
Pir Fahim Shah

erstellen Sie eine XML-Datei in einem Zeichnungsordner in Android wie: 

round_button.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
       Android:shape="rectangle">

    <corners Android:radius="20dp"/> // if you want clear round shape then make radius size is half of your  button`s height.
    <solid Android:color="#EEFFFFFF"/> // Button Colour
    <padding
        Android:bottom="5dp"
        Android:left="10dp"
        Android:right="10dp"
        Android:top="5dp"/>

</shape>

Nun diese XML-Datei als Hintergrund für Ihre Schaltflächen.

 <Button
        Android:id="@+id/button"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:background="@drawable/rounded_button"
        Android:text="@string/button_text"
        Android:textColor="@color/black"/>
12
Arunendra

Es wird von Google empfohlen , dass Sie keine Benutzeroberflächenelemente von anderen Plattformen nachahmen. Ich würde in einer Android-Anwendung keine abgerundeten iOS-Stil-Schaltflächen verwenden.

7

ImageView so erweitern:

public class RoundedImageView extends ImageView {
  private static final String TAG = "RoundedImageView";

  private float mRadius = 0f;

  public RoundedImageView(Context context) {
    super(context);
  }

  public RoundedImageView(Context context, AttributeSet attrs) {
    super(context, attrs);

    // retrieve styles attributes
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundedView);
    mRadius = a.getDimension(R.styleable.RoundedView_radius, 0f);
    a.recycle();
  }

  @Override
  protected void onDraw(Canvas canvas) {
    // only do this if we actually have a radius
    if(mRadius > 0) {
      RectF rect = new RectF(0, 0, getWidth(), getHeight());
      Path clipPath = new Path();
      clipPath.addRoundRect(rect, mRadius, mRadius, Path.Direction.CW);
      canvas.clipPath(clipPath);
    }
    super.onDraw(canvas);
  }
}

Wenden Sie Ihre normale Hintergrundressource darauf an, und es sollte mit abgerundeten Ecken beschnitten sein.

4
Cody Caughlan

Dies kann mit dem Eckattribut erfolgen. Schauen Sie sich die folgende XML an.

<item>
    <shape Android:shape="rectangle" >
        <stroke
            Android:height="1.0dip"
            Android:width="1.0dip"
            Android:color="#ffee82ee" />

        <solid Android:color="#ffee82ee" />

        <corners
            Android:bottomLeftRadius="102.0dip"
            Android:bottomRightRadius="102.0dip"
            Android:radius="102.0dip"
            Android:topLeftRadius="102.0dip"
            Android:topRightRadius="102.0dip" />
    </shape>
</item>

2
Rohit Goyal

Es ist viel besser, die Status und Formen der Schaltflächen in einer XML-Selector-Datei zu speichern. Damit sollte Ihre App schneller laufen/verbessern. Versuchen Sie dies (mit freundlicher Genehmigung von Einführung in die Android-Anwendungsentwicklung). Hier nicht zu spammen, nur zu zeigen, dass dies nicht mein Code ist.

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <item Android:state_pressed="true" >
    <shape Android:shape="rectangle"  >
     <corners Android:radius="12dip" />
     <stroke Android:width="1dip" Android:color="#333333" />
     <gradient Android:angle="-90" Android:startColor="#333333"      Android:endColor="#555555"  />            
    </shape>
    </item>
    <item Android:state_focused="true">
    <shape Android:shape="rectangle"  >
     <corners Android:radius="12dip" />
     <stroke Android:width="1dip" Android:color="#333333" />
     <solid Android:color="#58857e"/>       
    </shape>
    </item>  
    <item >
    <shape Android:shape="rectangle"  >
     <corners Android:radius="12dip" />
     <stroke Android:width="1dip" Android:color="#333333" />
     <gradient Android:angle="-90" Android:startColor="#333333" Android:endColor="#555555" />            
    </shape>
    </item>

    </selector>

P.S.-Designtipp: Farbverläufe und abgerundete Rechtecke eignen sich am besten, wenn man sie kaum erkennen kann.

1
Evan Espey

Erstellen Sie eine Drawable-Ressource mit dem Namen btnOval -> und anschließend den Code.

 <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:Android="http://schemas.Android.com/apk/res/Android" 
Android:shape="oval"  
Android:padding="10dp">   
      <solid Android:color="#6E6E6E"/> 
    </shape>

und Benutzer in Button-Tag wie,

<Button
andorid:width=""
Android:hieght=""
Android:background="@Drawable/btnOval"
/>
0
Ashik Azeez

Abgerundete Schaltflächen können auch mithilfe der Ringform erstellt werden, siehe http://www.zoftino.com/Android-shape-drawable-examples

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:innerRadius="0dp"
    Android:shape="ring"
    Android:thickness="40dp"
    Android:useLevel="false">
    <solid Android:color="@color/colorPrimary" />
    <padding Android:bottom="50dp"
        Android:left="16dp"
        Android:right="16dp"
        Android:top="50dp"/>
</shape>
0
Arnav Rao

Versuchen Sie den folgenden Code. Erstellen Sie eine zeichnungsfähige Datei mit dem Namen circular_button.xml und fügen Sie den folgenden Code ein

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<solid Android:color="#008577" />
<corners Android:bottomRightRadius="100dp"
    Android:bottomLeftRadius="100dp"
    Android:topRightRadius="100dp"
    Android:topLeftRadius="100dp"/>
</shape>

Ändern Sie dann den Hintergrund der Schaltfläche in diese Zeichnungsdatei

 <Button
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:background="@drawable/circle_button"
                Android:text="Button"/>

Wenn Sie eine Vollkreis-Schaltfläche wünschen, können Sie die folgende Zeichenfolge verwenden

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="oval">

    <solid
        Android:color="#008577"/>

    <size
        Android:width="120dp"
        Android:height="120dp"/>
</shape>
0