2010-08-17 23 views
34

Belirli bir Android görünümü için renk durumu listesi oluşturmak için this tutorial'u takip ettim. Sadece tıkladığında vurgulamak istiyorum, böylece kullanıcı ekranın neden değiştiğini biliyor.Android LinearLayout: Ne yapıyorum yanlış?

görünümü işlenir, aşağıdaki hatayı alıyorum:

org.xmlpull.v1.XmlPullParserException: İkili XML dosyası hat # 3: etiketi bir çekilebilir

tanımlayan bir 'çekilebilir' özelliği veya çocuk etiketi gerektirir (res/düzen/myview.xml içinde)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="#ff33ffff"/> <!-- pressed --> 
    <item android:color="#ff000000"/> <!-- default --> 
</selector> 

Benim düzen XML:

Rengim XML (içinde res/renk/viewcolor.xml)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/myview" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="top" 
    android:background="@color/viewcolor"> 
    <!--crap in the layout--> 
</LinearLayout> 

Neyi özledim?

+0

, bu depoyu kontrol edin: gibi özel tıklanabilir/sınanabilir '' 'LinearLayout''' orada https://github.com/shamanland/AndroidLayoutSelector bir' '' ToggleButton''' –

cevap

52

Bu hatanın etrafından, durum rengi yerine durum bilgisi kullanılabilir olanı kullanarak çalıştığımı hatırlıyorum. Bazı sebeplerden dolayı mizanpaj arka planı yalnızca durumsal renkler ile çalışmaz. Bu nedenle, durum bilgisi içeren bir çizim oluşturmayı deneyin (örneğin farklı renklere sahip şekil çizgilerinin listesi) ve arka plan olarak kullanın.

res/çekilebilir/pressed.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 
    <solid android:color="#ff33ffff" /> 
</shape> 

res/çekilebilir/normal.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 
    <solid android:color="#ff000000" /> 
</shape> 

res/çekilebilir/background.xml: O

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

background.xml'yi arka plan olarak çizilebilir kullanın :)

+0

Mükemmel çalıştı. Yine de, rengin tam çalışmadığı garip. Teşekkürler! – iandisme

+14

Çizim yapılabilen şekillerdeki şekilleri kullanmak yerine, android: drawable özniteliği bir renk kaynağını (ör. @ Renk/siyah) kabul eder. –

49

Çekilebilecek şekiller kullanmak yerine, bir renk kaynağını kabul eden android:drawable özniteliğini kullanabilirsiniz (ör. @siyah renk).

Layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myview" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="top" 
    android:background="@drawable/myDrawable"> 
    <!-- other views in layout--> 
</LinearLayout> 

my_drawable.xml belirttiğiniz renkler res/values/colors.xml tanımlanan emin olmak gerekir, ya da bu olmaz my_drawable.xml yılında

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- focused --> 
    <item android:state_focused="true" android:drawable="@color/YOUR_COLOR_HERE" /> 
    <!-- focused and pressed--> 
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/YOUR_COLOR_HERE" /> 
    <!-- pressed --> 
    <item android:state_pressed="true" android:drawable="@color/YOUR_COLOR_HERE" /> 
    <!-- default --> 
    <item android:drawable="@color/YOUR_COLOR_HERE" /> 
</selector> 

iş.

Bir renk kaynağından renk değişimi yerine bir görüntüyü çekilebilir bir kaynağa kullanmak isterseniz. Örnek: Birisi tam bir çözüm elde etmek istiyorsa

android:drawable="@color/YOUR_COLOR_HERE" 
android:drawable="@drawable/YOUR_IMAGE_HERE" 
+2

Bu benim için kutudan oldukça işe yaramadı. Ben android değiştirmek zorunda kaldı: android için seçici öğeleri çekilebilir: renk ve sonra iyi çalıştı. – emmby

+0

Bunun için çok teşekkürler, Austyn. – metter

+0

@emmby: Bu kodu "kutunun dışında" kullanmak için ne yapmanız gerektiğine dair bir açıklama ekledim. –

İlgili konular