Xml kullanarak bir rengin yuvarlatılmış köşe yarıçapını nasıl ayarlayabilirim?


108

Android web sitesinde renkli çizimlerle ilgili bir bölüm var . Bu çekilebilir öğeleri xml'de tanımlamak şuna benzer:

<resources>
    <drawable name="solid_red">#f00</drawable>
    <drawable name="solid_blue">#0000ff</drawable>
    <drawable name="solid_green">#f0f0</drawable>
</resources>

Java api'de, yuvarlak köşeleri tanımlamak için aşağıdaki yönteme sahiptirler:

setCornerRadius(float radius)

XML'de yuvarlatılmış köşeleri ayarlamanın bir yolu var mı?


Köşeleri koddan ayarlamak için bkz. (Degrade
Çekmeceleri

Yanıtlar:


319

<shape>XML'de yuvarlatılmış köşelere sahip bir çekmece oluşturmak için etiketini kullanın . (Şekil etiketiyle bir renk gradyanı tanımlamak gibi başka şeyler de yapabilirsiniz).

Beyaz arka planlı, siyah kenarlıklı ve yuvarlatılmış köşeli bir çizim oluşturmak için uygulamalarımdan birinde kullandığım XML dosyasının bir kopyası:

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

    <padding android:left="1dp"
             android:top="1dp"
             android:right="1dp"
             android:bottom="1dp" /> 
             
    <corners android:radius="7dp" /> 
</shape>

1
bu dosyayı nereye kaydedebilirim ve java
koduma

7
onu çekilebilir dizine bir xml dosyası olarak kaydedin, sonra onu kaynak adını (R.drawable.your_xml_name) kullanarak herhangi bir çekilebilir (simge veya kaynak dosyası) kullanacağınız gibi kullanın
Guillaume

30
bu özel durumda tüm yarıçaplar aynıdır, bu nedenle android'i kullanmış olabilirsiniz: radius = "7dp"
Kru

2
Ayrıca, yarıçapı ayrı olarak (aynı değerlerle bile olsa) tanımlarsanız ve size "Pat.isConvex desteklenmiyor" uyarısı verirseniz, Android Studio'daki düzen oluşturucu bunu oluşturmayacaktır. <Corners android: radius = "7dp" /> kullanın
Francesco Ambrosini

@shyam Bunu "arka plan" olarak ayarlayabilirsiniz. Bir TextView'da kullanırsanız, metnin yuvarlak kenardan kalabalık olmaması için başlangıç ​​ve bitiş için dolgu eklemeyi hatırlamanız gerekir
RowanPD

19

mbaird'in cevabı gayet iyi çalışıyor. Android'de bir hata var gibi göründüğünü unutmayın (en azından 2.1), herhangi bir köşenin yarıçapını 0'a ayarlarsanız, tüm köşeleri 0'a zorlar (en azından "dp" birimleri için durum böyledir; ben yapmadım Başka birimlerle denemeyin).

Üst köşelerin yuvarlatıldığı ve alt köşelerin kare olduğu bir şekle ihtiyacım vardı. Bunu, kare olmasını istediğim köşeleri 0: 0.1dp'den biraz daha büyük bir değere ayarlayarak başardım. Bu yine de kare köşeler olarak görünür, ancak diğer köşeleri 0 yarıçaplı olmaya zorlamaz.


az önce 0.1 dp mi yazdın? işe yarıyor mu, üst yuvarlatılmış köşelere ve alttaki karelere de ihtiyacım var, sadece 1 dp kullandığımla aynı sorun, kare köşelerde ve yuvarlak köşelerde 10 dp, haklısınız, hala fark ediliyor, ancak bana% 90 istemek, belgelere göre yuvarlak olmayan köşelerde 0 ayarı işe yaramalıydı.
codeScriber

Aslında bu bir hata değil, belgelerde var: developer.android.com/guide/topics/resources/…
Tsuharesu

1

Aşağıdaki kodu deneyin

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
    android:bottomLeftRadius="30dp"
    android:bottomRightRadius="30dp"
    android:topLeftRadius="30dp"
    android:topRightRadius="30dp" />
<solid android:color="#1271BB" />

<stroke
    android:width="5dp"
    android:color="#1271BB" />

<padding
    android:bottom="1dp"
    android:left="1dp"
    android:right="1dp"
    android:top="1dp" /></shape>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.