2013-04-22 36 views
7

Tôi muốn biết liệu có bộ chọn cho bố cục như có dành cho đồ vẽ không.Bộ chọn xml Android cho bố cục

Ví dụ về selector với drawable:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- When selected --> 
<item android:drawable="@drawable/tab_library_clicked" 
     android:state_selected="true" /> 
<!-- When not selected --> 
<item android:drawable="@drawable/tab_library_not_clicked" /> 

Nhưng là nó có thể có một cái gì đó như thế này (mã này dưới đây không làm việc cho tôi, nhưng nó sẽ cho bạn một ý tưởng về những gì tôi đang cố gắng để thực hiện):

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<!-- When selected --> 
<item android:layout="@layout/tab_library_clicked" 
     android:state_selected="true" /> 
<!-- When not selected --> 
<item android:layout="@layout/tab_library_not_clicked" /> 

+0

Bạn định sử dụng như thế nào? –

+0

@ Mr.Me Tôi muốn sử dụng điều này cho TabSpec.setIndicator(). Tôi đã thử mã xml đầu tiên mà tôi đã liên kết nhưng các hình ảnh không làm đầy tab được chỉ định để trông đẹp mắt. Nhưng khi tôi tạo một bố trí với một ImageView và đã match_parent cho chiều rộng và chiều cao để điền vào tab nó trông tốt hơn rất nhiều vì vậy tôi đã tự hỏi nếu có một cách để làm mã xml thứ hai tôi đặt. – JoeyL

Trả lời

3

tôi có thể sai, nhưng tôi khá chắc chắn điều này không tồn tại.

"tinh vi nhất" bạn có thể thực hiện với bộ chọn trong XML có thể đang sử dụng một số drawable layer list để kết hợp một số drawables vào một trạng thái.

Hoặc bạn có thể thử sử dụng các sự kiện touch_down và touch_up để gọi theo chương trình setVisibility() trên bố cục, nhưng tôi cho rằng hiệu suất sẽ rất kém.

+0

danh sách drawable rất hữu ích trong những trường hợp như vậy – Braj

0

Không có thuộc tính như vậy android:layout cho item trong documentation. Nó được cho là được sử dụng với android:drawable.

+0

Tôi biết điều này. Tôi hỏi nếu có bất cứ điều gì có thể chọn một bố trí dựa trên state_selected như có cho drawables. – JoeyL

+0

và đó là những gì tôi thực sự trả lời. Tôi có thể trả lời ** 'Xin lỗi, nó không phải là có thể!' ** quá nhưng nghĩ để cung cấp cho bạn một số lời giải thích mà tôi nghĩ đã không đi tốt trong trường hợp của bạn :) – waqaslam

+0

Không có bạn đã không trả lời câu hỏi của tôi. Tôi đã không yêu cầu nếu android: bố trí cho tồn tại/hoạt động, tôi biết điều này vì nó không hoạt động như tôi đã nói trong bài đăng gốc. Tất cả tôi yêu cầu là nếu có bất cứ điều gì có thể mô phỏng logic mã xml thứ hai tôi đăng với tất cả những gì xml đã cung cấp. Nếu "nó là không thể" sau đó cho tôi lý do chẳng hạn như không có thuộc tính như vậy ở tất cả trong xml với android: bố trí, do đó bạn không thể làm một điều như vậy, không chỉ cho :). – JoeyL

1

Ok, những gì bạn đang tìm kiếm là một cách để truyền bá trạng thái của cha mẹ đến các chế độ xem con của nó. Bằng cách đó, bất cứ khi nào trạng thái chỉ báo thay đổi (được chọn, không) trạng thái của lần xem hình ảnh thay đổi.

Android đã có thuộc tính xml cho điều đó.

android:duplicateParentState="true" 

sử dụng chế độ này với chế độ xem con trong tệp bố cục và kết hợp với bộ chọn. ví dụ:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="#f00" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:text="Large Text" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:duplicateParentState="true" 
    /> 

<ImageView 
    android:id="@+id/imageView1" 
    android:duplicateParentState="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:src="@drawable/selector" /> 

1

Mặc định cơ chế Selector chỉ cung cấp lựa chọn thay thế cho tài sản (như drawable sử dụng vv), tùy thuộc vào tình trạng của một người xem. Nó không thay thế chính các Chế độ xem. Chức năng bạn đang yêu cầu không khả dụng.

Trạng thái đã chọn cho Chế độ xem được gắn với một trong các giá trị của các trường *_STATE_SET trong lớp View. Trạng thái kết hợp của chế độ xem được truy xuất qua getDrawableState().

Bạn có thể mở rộng lớp Chế độ xem và sử dụng các trạng thái này để làm điều gì đó tùy chỉnh. Hoặc, bạn có thể phát triển bộ điều khiển bố cục tùy chỉnh, đồng hồ theo dõi trạng thái thay đổi trên cây Xem và thay thế chế độ xem con theo tài nguyên xml.

Nhưng nỗ lực này là không đáng vì:

  1. Quan điểm cấu trúc/bố trí phải vẫn như cũ trong sự tương tác của người dùng với nó. Bạn không nên thay đổi một nút vào một hộp kiểm khi người dùng chọn nó, thay thế các khung nhìn/bố trí như thế chỉ đơn giản là khó hiểu UX-khôn ngoan.

  2. Bạn chỉ cần sửa đổi giao diện của chế độ xem về tương tác của người dùng, đã được cung cấp bởi các biểu tượng và màu vẽ dựa trên công cụ chọn.

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