2009-04-21 9 views
17

Tôi biết cách đặt biểu tượng trên mỗi tab, điều đó không có vấn đề gì. Tôi cũng chạy ngang qua này: [Stack Overflow sợi trên khá nhiều điều tương tự] [1]Android: Tùy chỉnh các tab ở trạng thái: Làm cách nào để tạo một bộ chọn có thể vẽ được

Tôi đi theo một trong các liên kết từ câu hỏi đó và tìm thấy [này] [2]

Khá nhiều, nó nói để sử dụng bộ chọn được xác định trong XML, chắc chắn, đã làm điều đó. Nhưng không có id liên quan w/nó vì vậy tôi không chắc chắn làm thế nào để có được chức năng chọn như là một drawable vì vậy tôi có thể sử dụng nó như là biểu tượng cho các tab. Có lẽ tôi đang đi về điều này một cách sai lầm. Nhưng đây là những gì tôi có, và rõ ràng là thiếu một cái gì đó.

<selector 
    android:id="@+id/myselector" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Non focused states --> 
    <item 
     android:state_focused="false" 
     android:state_selected="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/darklogo" /> 
    <item 
     android:state_focused="false" 
     android:state_selected="true" 
     android:state_pressed="false" 
     android:drawable="@drawable/lightlogo" /> 

    <!-- Focused states --> 
    <item 
     android:state_focused="true" 
     android:state_selected="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/lightlogo" /> 
    <item 
     android:state_focused="true" 
     android:state_selected="true" 
     android:state_pressed="false" 
     android:drawable="@drawable/lightlogo" /> 

    <!-- Pressed --> 
    <item 
     android:state_pressed="true" 
     android:drawable="@drawable/lightlogo" /> 
</selector> 

Trong mã của tôi, một tab dụ được tạo ra sử dụng:

host.addTab(host.newTabSpec("three") 
       .setIndicator("map",drawables) 
       .setContent(new Intent(this, Map.class))); 

Ngay bây giờ drawable chỉ là một tham chiếu đến một tài nguyên hình ảnh có thể vẽ được. Làm cách nào để làm cho bộ chọn có thể vẽ được?

Đây là câu hỏi của tôi [1]: Updating Android Tab Icons [2]: http://groups.google.com/group/android-evelopers/browse_thread/thread/ef3bdebcb715b385

Trả lời

20

XML bạn đã bao gồm ở đây là một cách để xác định đối tượng vẽ được cho phép bạn nhúng một tuyên bố như vậy. Nó thể hiện một drawable khác nhau tùy thuộc vào trạng thái của View nó đang được gán cho. Có thể vẽ được, bạn nên lưu tệp dưới dạng tệp xml trong thư mục res/drawable của dự án của bạn (ví dụ: tabselector.xml).

Để sử dụng cho Tabhost, bạn cần tạo TabActivity như bình thường (như được hiển thị trong tutorial example) này.

Sau đó, khi bạn thêm từng tab vào máy chủ lưu trữ, bạn chỉ định tabselector có thể drawable làm chỉ báo như được hiển thị cho "TAB 1" bên dưới.

Drawable mySelector = getResources().getDrawable(R.drawable.tabselector); 

mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB 1", mySelector).setContent(R.id.textview1)); 
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2)); 

Lưu ý: Bạn không thể thay đổi màu sắc của nền tab đằng sau các biểu tượng vào thời điểm này.

+0

Như thường lệ. Cảm ơn nhiều. Tôi nghĩ rằng không có nó thư mục drawable của tôi là vấn đề lớn hơn của tôi. Cảm ơn bạn đã bao gồm một số mã để giúp tôi di chuyển .. Tôi đánh giá cao điều đó. – Chrispix

+0

hiện có thể thực hiện được không? tôi có nghĩa là báo cáo Lưu ý của bạn. hãy kiểm tra câu hỏi của tôi, vui lòng: http://stackoverflow.com/questions/2810075/customizing-tab-indicator-images-in-android – Praveen

1

Bạn có thể sử dụng dạng xem làm chỉ báo, theo cách này bạn có thể tùy chỉnh nó theo cách bạn muốn.

mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator(View MyView).setContent(R.id.textview1)); 
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2)); 

Tab đầu tiên sẽ sử dụng dạng xem làm chỉ báo của nó và thứ hai là CharSequence. Hãy xem lớp TabSpec thực tế (http://developer.android.com/reference/android/widget/TabHost.TabSpec.html).

+0

Tính năng này hoạt động từ phiên bản Android 1.6. Đừng quên nó. –