Android XML çizilebilir dosyasında bir daire şekli nasıl tanımlanır?


687

Android için XML'deki şekiller tanımlarının belgelerini bulmakta bazı sorunlar yaşıyorum. Düzen dosyalarıma dahil etmek için bir XML Dosyasında düz renkle dolu basit bir daire tanımlamak istiyorum.

Ne yazık ki android.com'daki Belgeler Shape sınıflarının XML özelliklerini kapsamaz. Bir daire çizmek için bir ArcShape kullanmam gerektiğini düşünüyorum , ancak bir yaydan bir daire oluşturmak için gereken boyutu, rengi veya açıyı nasıl ayarlayacağınıza dair bir açıklama yok.


3
Burada şekil çizilebilir oluşturma hakkında bilgi edinebilirsiniz: developer.android.com/guide/topics/resources/…
Mario Kutlev

Xml çemberini buradan geliştirebilirsiniz.
Shahab Rauf

Android Dev belgeleri o zamandan beri geliştirildi. Şimdi android:shapeelement - Çekilebilir kaynaklar kapsar .
naXa

Yanıtlar:


1515

Bu Android'de çizilebilir olarak basit bir daire.

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

   <solid 
       android:color="#666666"/>

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

51
Ve rengi dinamik olarak nasıl değiştirebilirim?
Ankit Garg

5
@AnkitGarg Java kodundan bir renk filtresi uygulayabilirsiniz (bkz.
Çizilebilir

7
Denedim dpve oval bir şekle çarpıtıldı. Benim için, ptbunun yerine kullanarak düzeltildi.
Tyler

13
Daha sonra görünüm için bir kare boyutu tanımlarsanız sizeiçinde gerek yoktur shape.
Ferran Maylinch

2
Şekli ovaldir ve yuvarlak değildir. Herkes onaylayabilir mi ??
Tarun

762

Bunu görünüm arka planınız olarak ayarlayın

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

resim açıklamasını buraya girin

Dolu daire kullanımı için:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid
        android:color="#48b3ff"/>
</shape>

resim açıklamasını buraya girin

İnme ile katı:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#199fff"/>
    <stroke
        android:width="2dp"
        android:color="#444444"/>
</shape>

resim açıklamasını buraya girin

Not : ovalŞeklin daire olarak görünmesini sağlamak için , bu örneklerde, ya bu şekli arka planı olarak kullandığınız görünümünüz bir kare olmalıdır ya da şekil etiketinin heightve widthözelliklerini eşit bir değere ayarlamanız gerekir.


2
Güzel çözüm. Tabii ki, görünümün genişliği ve yüksekliği aynı ise oval bir daire olarak görünür. Bence görünümün boyutu ne olursa olsun bir daire olarak görünmesini sağlamanın bir yolu vardı.
Ferran Maylinch

2
@FerranMaylinch "Bence görünümün boyutu ne olursa olsun bir daire gibi görünmesini sağlamanın bir yolu vardı." Ben bir ImageView ("src" çizilebilir olarak daire ile) sabit genişlik / yükseklik ve bir metin (örneğin) saran bir TextView sarma hem RelativeLayout kullanarak bunu çözdü.
Michele

Aynı şeyi yapıyorum ama daire oval olarak çiziliyor
Bugs

Çalışma zamanında farklı kenarlık renklerine sahip bir metin görünümü oluşturmak için buna ihtiyacımız olursa ne olur?
Anshul Tyagi

@AnshulTyagi Bunu yourView.getBackground()rengi arayarak ve manuel olarak ayarlayarak yapabileceğinize inanıyorum . bunun gibi uygun bir türe dökmeniz gerekir ShapeDrawable. Bununla ilgili SO ile ilgili sorular var.
Reza Rezirloo

93

Basit çevre kodu

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
        <solid android:color="#9F2200"/>
        <stroke android:width="2dp" android:color="#fff" />
        <size android:width="80dp" android:height="80dp"/>
</shape>

46

Android SDK örneklerine bakın. ApiDemos projesinde birkaç örnek vardır:

/ ApiDemos / res / çekilebilir /

  • black_box.xml
  • shape_5.xml
  • vb

Degrade dolgulu bir daire için şöyle görünecektir:

<? xml sürüm = "1.0" kodlama = "utf-8"?>
<şekil xmlns: android = "http://schemas.android.com/apk/res/android" android: şekil = "oval">
    <degrade android: startColor = "# FFFF0000" android: endColor = "# 80FF00FF"
            robot: açısı = "270" />
</ Şekil>


46

VectorDrawable'ı aşağıdaki gibi kullanabilirsiniz :

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="200dp"
    android:height="200dp"
    android:viewportHeight="64"
    android:viewportWidth="64">

    <path
        android:fillColor="#ff00ff"
        android:pathData="M22,32
        A10,10 0 1,1 42,32
        A10,10 0 1,1 22,32 Z" />
</vector>

Yukarıdaki xml şu şekilde işler:

resim açıklamasını buraya girin


Hey, daire ve görünüm arasında bir dolgu var. Bana yardım edebilir misin?
Ajeet

1
@Ajeet, görünümün boyutunu değiştirebilir ve yolunuzu grubun içine koyabilir ve çeviri ve ölçeği belirtebilirsiniz<group android:translateX="-10" android:translateY="15"><path ...
Boris Treukhov

2
@Riyas pathData bölümünü açıklayabilir misiniz? bu koordinatlar ne ima ediyor?
Darshan Miskin

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

    <!-- fill color -->
    <solid android:color="@color/white" />

    <!-- radius -->
    <stroke
        android:width="1dp"
        android:color="@color/white" />

    <!-- corners -->
    <corners
        android:radius="2dp"/>
</shape>

1
Ovalde ne yaparsınız <corners />(ki bence köşeleri yoktur)?
Scott Biggs

18

Eğer bir istiyorsanız daire böyle

resim açıklamasını buraya girin

Aşağıdaki kodu kullanmayı deneyin:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="2"
    android:useLevel="false" >
    <solid android:color="@android:color/white" />
    <stroke
        android:width="1dp"
        android:color="@android:color/darker_gray" />
</shape>

17

Ön materyal için basit bir circle_background.xml:

<?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="oval">
            <solid android:color="@color/color_accent_dark" />
        </shape>
    </item>
    <item>
        <shape android:shape="oval">
            <solid android:color="@color/color_accent" />
        </shape>
    </item>
</selector>

'android:background="@drawable/circle_background"Düğmenizin düzen tanımındaki özellik ile birlikte kullanabilirsiniz


+ şekle (boyutlara) 'boyut' ekle (usecase'e göre).
TouchBoarder

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

    <stroke
        android:width="10dp"
        android:color="@color/white"/>

    <gradient
        android:startColor="@color/red"
        android:centerColor="@color/red"
        android:endColor="@color/red"
        android:angle="270"/>

    <size 
        android:width="250dp" 
        android:height="250dp"/>
</shape>

7

res / drawble / circle_shape.xml

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

        <shape android:shape="oval">
            <solid android:color="#e42828"/>
            <stroke android:color="#3b91d7" android:width="5dp"/>
            <!-- Set the same value for both width and height to get a circular shape -->
            <size android:width="250dp" android:height="250dp"/>
        </shape>
    </item>
</selector>

resim açıklamasını buraya girin


4

Bunu deneyebilirsiniz -

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:innerRadiusRatio="700"
    android:thickness="100dp"
    android:useLevel="false">

    <solid android:color="#CCC" />

</shape>

Ayrıca, çemberin yarıçapını ayarlayarak da ayarlayabilirsiniz android:thickness.

resim açıklamasını buraya girin


Bu gerçekten güzel! Öznitelikler sezgisel olmadığından kesinlikle oynamak biraz zaman alır. Bunu her seferinde kenarlık için güzel bir boş daire göstermeyi başardım. Ve tüm dairenin görüntülendiğinden emin olmak için dolgu kullanabilirsiniz.
Scott Biggs

2

Nedense ConstraintLayout içinde bir daire çizemedim, yukarıdaki cevapların hiçbirini kullanamadım.

Mükemmel bir şekilde işe yarayan şey, "Alt + 7" tuşlarına bastığınızda çıkan metinle birlikte basit bir TextView.

 <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#0075bc"
            android:textSize="40dp"
            android:text="•"></TextView>

Çok zeki! Eminim birisi bunu faydalı bulacaktır.
Scott Biggs

çok yararlı, harika ..
Mahbubur Rahman Khan

1

Bunu kullanmayı deneyebilirsiniz

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

<item>
    <shape
        android:innerRadius="0dp"
        android:shape="ring"
        android:thicknessRatio="2"
        android:useLevel="false" >
        <solid android:color="@color/button_blue_two" />
    </shape>
</item>

ve bunu bir metin görünümü için kullanıyorsanız genişlik ve yükseklik en boy oranını rahatsız etmek zorunda değilsiniz


0
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="oval">
            <solid android:color="@color/text_color_green"/>
            <!-- Set the same value for both width and height to get a circular shape -->
            <size android:width="250dp" android:height="250dp"/>
        </shape>
    </item>
</selector>

0

Android XML çekilebilir dosyasındaki daire şekli

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="@android:color/white" />
    <stroke
        android:width="1.5dp"
        android:color="@android:color/holo_red_light" />
    <size
        android:width="120dp"
        android:height="120dp" />
</shape>

Ekran görüntüsü

resim açıklamasını buraya girin


-22

Sadece kullan

ShapeDrawable circle = new ShapeDrawable( new  OvalShape() );

26
Ve bunu XML mizanpaj dosyamdaki bir ImageView'ın src'si olarak nasıl ayarlayabilirim?
Janusz

Bu, bir xml düzen kodu için doğrudan geçerli değildir
François Legrand

1
bu aslında işe yarıyor. Teşekkürler :) val background = ShapeDrawable (OvalShape ()) background.paint.color = ContextCompat.getColor (holder.getView (). Bağlam, R.color.green) val katmanları = arrayOf (arka plan, kaynak !!) greenRoundIcon.setImageDrawable (LayerDrawable (katmanlar))
David

Çok sevmedim, ama işe yarıyor ve bana yardımcı oluyor, teşekkürler
Pavel Shorokhov
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.