2012-04-11 27 views
5

Tôi đang sử dụng thư viện bị khấu hao cho TabHost/TabWidget trong ứng dụng Ice Cream Sandwich. Tôi không có thời gian để làm quen với ActionBarSherlock, vì vậy tôi phải đi vào ứng dụng theo cách duy nhất tôi biết được.Làm thế nào để tạo kiểu cho một TabWidget trong Ice Cream Sandwich?

Tôi muốn biết cách tôi có thể tạo kiểu TabWidget và các đối tượng Tab của nó, từ việc thay đổi màu tab đã chọn thành màu nền và hình ảnh? Sử dụng kiểu dáng và chủ đề chuẩn dường như không hoạt động.

Trả lời

8

Giả sử thư viện không dùng nữa hoạt động như thường lệ, vì nó là thủ tục tôi đã sử dụng để tô màu các tab của mình. Tôi chỉ cần thiết lập nền trong mã như sau, vì nó đã không có mặt trực tiếp truy cập trong xml:

TabWidget tabs = (TabWidget)getTabWidget();    
     for (int i = 0; i<tabs.getChildCount(); i++) { 
      RelativeLayout tab = (RelativeLayout) tabs.getChildAt(i); 
      tab.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.tabindicator)); 

Các drawable tabindicator được như sau:

<?xml version="1.0" encoding="utf-8" ?> 
<selector 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/tab_unselected" /> 
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected" /> 
<!-- Focused states --> 
<item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_focus" /> 
<item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_focus" /> 
<!-- Pressed --> 
<item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_press" /> 
<item android:state_pressed="true" android:drawable="@drawable/tab_press" /> 
</selector> 

Các drawables chỉ là 9-patch hình ảnh với màu sắc, mặc dù bạn có thể có được một hiệu ứng tương tự bằng cách sử dụng một màu tiêu chuẩn.

+0

Điều này càng ít nhiều tại chỗ, cảm ơn. Tôi phải đi lấy TabWidget bằng cách gọi tabHost.getTabWidget() nhưng từ đó, phần còn lại rơi vào vị trí. Cám ơn bạn Stev_k. –

+0

Điều này một lần nữa được sử dụng sau khi 'FragmentTabHost' được giới thiệu trong lib hỗ trợ. Ngoài ra, tab xem con không phải là 'RelativeLayout' nhưng nó là' LinearLayout' trong 'FragmentTabHost'. –

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