2013-02-27 10 views
11

Nasıl yaparım "çağlayan" olarak yer alan alt görünümüne bir üst görünümden bir özel özelliğin değeri? İşteCascade çocuk görünümüne bir üst görünümden bir özel özelliğin değeri?

<com.example.CustomLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    app:percent="35" > 

    <com.example.CustomView 
     android:id="@+id/customView1" 
     app:percent="how-to-get-app:percent-value-here???" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</com.example.CustomLayout> 

, CustomLayoutLinearLayout uzanır:

Bu bir örnek kullanarak açıklamak kolay yoldur. Ben <declare-styleable> elemanı kullanılarak attrs.xml özel bir niteliği "yüzde" belirledik. Gördüğünüz gibi, ben CustomLayout için XML 35 oranında ayarlayın.

Şimdi aynı değeri CustomView (View'u genişletiyor) ve CustomLayout içerisine dahil etmek istiyorum. Bunu XML'de yapmanın bir yolunu bulamıyorum (kodda bunu yapmak çok kolay). TypedArray#getInt() olarak bu (beklendiği) NumberFormatException başarısız arasında

app:percent="@attr/percent"

app:percent="?attr/percent"

ikisi:

Aşağıdaki çalıştı.

Yani, almak konusunda herhangi bir fikir bu işe?

+0

bir çözüm buldunuz mu? Ayrıca @CommonsWare herhangi bir şans ile hiç böyle bir şey denediniz mi? Bu çalışma ... –

+0

@AntonioE almak konusunda fikir dışarı gerçekten değilim. Hayır, asla bir yol bulamadı. Bunun yerine Java kodunda sona erdi. – curioustechizen

+0

Bunun için bir cevap olmadığını hayal kırıklığına uğrattı. – Everett

cevap

1

Fikir biraz geç geliyor ve yöntem düz ileriye doğru olmasa da, yine de paylaşmaya değer olduğunu düşünüyorum. Özel öznitelikler bir temaya koyabiliriz, bu nedenle öznitelikler, temanın kullanıldığı ana görünümden tüm alt görünümlere geçirilebilir (yani, öznitelikler Görünüm Grubu içinde bulunur).

Örnek aşağıdaki gibi:

<integer name="percentage">35</integer> 

<style name="CustomTheme" parent="suitable theme for your case"> 
    <item name="percent">@integer/percentage</item> 
</style> 

<com.example.CustomLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:theme="@style/CustomTheme" > 

    <com.example.CustomView 
     android:id="@+id/customView1" 
     app:percent="?attr/percent" <!--Note: that's how it refers to the value, 
     however, re-assign the attribute value here is meaningless as attribute percent 
     should exist in all child views now. You can retrieve its value via 
     Theme.obtainStyledAttributes(R.style.CustomTheme, new int[] {R.attr.percent}) 
     in every child view--> 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</com.example.CustomLayout> 
İlgili konular