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:
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
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"
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"/>
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.
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.
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>
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.
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"
/>
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>
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>