2011-09-19 23 views
13

Tôi đang gặp phải một số vấn đề mà về cơ bản tôi không biết cách khắc phục. Tôi có một LinearLayout với một số compenents con trong nó, như ImageView, TextView và như vậy, là một ví dụ có thể được nhìn thấy trong xml dưới đây:Android: Tuyên truyền trạng thái gốc cho chế độ xem con

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
style="@style/list_buttom_top"> 

<LinearLayout android:gravity="center_vertical" 
    android:paddingLeft="10dip" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1.0"> 

    <TextView android:text="title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/title" 
     style="@style/content_page_large_text" /> 

    <TextView android:text="summary" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/subtitle" 
     android:visibility="visible" 
     style="@style/content_page_small_text" /> 
</LinearLayout> 

<TextView android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/itemCount" 
    android:visibility="gone" 
    style="@style/content_page_large_count_text" /> 

<ImageView android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/chevron" 
    style="@style/list_buttom_chevron" /> 

</LinearLayout> 

Các list_buttom_top phong cách nói rằng khi LinearLayout là trong tình trạng ép, màu nền cần phải được thay đổi, và cho đến nay điều này đang làm việc. Vấn đề là content_page_large_text cũng nói rằng màu văn bản của TextView cũng cần được thay đổi, nhưng nó không xảy ra. Màu duy nhất thay đổi khi tôi nhấp vào LinearLayout là nền của nó.

<style name="list_buttom_top"> 
<item name="android:clickable">true</item> 
<item name="android:paddingTop">10dip</item> 
<item name="android:paddingBottom">10dip</item> 
<item name="android:paddingLeft">10dip</item> 
<item name="android:paddingRight">10dip</item> 
<item name="android:gravity">center_vertical</item> 
<item name="android:background">@drawable/background_view_rounded_top</item> 
</style> 

<style name="list_buttom_chevron"> 
    <item name="android:paddingLeft">4.0dip</item> 
    <item name="android:paddingTop">2.0dip</item> 
    <item name="android:paddingRight">4.0dip</item> 
    <item name="android:paddingBottom">2.0dip</item> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:src">@drawable/chevron</item> 
</style>  

Tôi đã thử sử dụng android: duplicateParentState = "true" trong TextViews của mình nhưng nó cũng không hoạt động. Điều tương tự cũng xảy ra với ImageView, hình ảnh nguồn của nó không thay đổi khi tôi nhấp vào LinearLayout.

Tôi có thiếu gì đó ở đây không? Cảm ơn sự chú ý T

Trả lời

0

Sẽ là một vấn đề dễ dàng hơn để theo dõi nếu chúng ta có thể thấy kiểu content_page_large_text của bạn. Ngoài ra, tôi không thấy cách bạn đang thực sự thiết lập màu sắc, là background_view_rounded_top của bạn là một yếu tố <selector> hoặc bạn đang đặt nó trong một người nghe trong hoạt động?

Nhưng vâng tôi cũng mới phát hiện ra rằng android: duplicateParentState = "true" không phải là thuốc chữa bách bệnh mà tôi nghĩ là vậy.

Nếu hai giải pháp đó hết hạn thì giải pháp go-to của tôi thường là thành phần tùy chỉnh cho bố cục gốc. http://developer.android.com/guide/topics/ui/custom-components.html Nhưng điều đó có thể không cần thiết nếu giao diện đơn giản như vậy. Tôi chắc rằng bạn có thể làm điều này với StateListDrawable s.

Thành phần tùy chỉnh thường dễ hơn tìm cách kết hợp ma thuật của biến xml và sẽ làm cho bố cục dễ hiểu hơn/có thể chỉnh sửa sau này nếu bạn dự định làm việc này phức tạp hơn.

33

Tôi nghĩ rằng bạn nên đặt android:addStatesFromChildren="true" trong bố cục tuyến tính, theo cách này trạng thái của trẻ em được truyền cho phụ huynh.

Ngoài ra, hãy đảm bảo NOT để kết hợp điều này với android:duplicateParentState="true" vì nó sẽ gây ra ngoại lệ tràn ngăn xếp (về cơ bản gây ra vòng lặp tham chiếu vô hạn).

+5

Mặc dù không trả lời hoàn toàn câu hỏi, 'android: duplicateParentState =" true "' chính xác là những gì tôi đang tìm kiếm. – PureSpider

+0

cảm ơn @SMR để chỉnh sửa ... –

+0

Anh ấy đã hỏi cách truyền bá trạng thái từ cha mẹ sang con. Không phải hướng ngược lại. –

Các vấn đề liên quan