2012-11-03 21 views
6

Mi chiedo se sia possibile applicare il tema TabWidget di ActionBarSherlock (v4.2.0) su TabWidget nativo? Quindi assomiglia a Holo su androidi pre ICS. Se sai come - per favore condividi.È possibile utilizzare lo stile ActionBarSherlock su TabWidget nativo?

Tutto quello che ho trovato è questo: https://gist.github.com/1126843 ma sembra non funzionare più.

standard di layout xml:

<?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" > 

    <TabHost 
     android:id="@android:id/tabhost" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <TabWidget 
       android:id="@android:id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 
      </TabWidget> 

      <FrameLayout 
       android:id="@android:id/tabcontent" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" > 
      </FrameLayout> 
     </LinearLayout> 
    </TabHost> 
</LinearLayout> 

risposta

3

ho trovato qualche soluzione io stesso. Non è risorse ABS puro, ma un uso minimo cose aggiuntive:

quasi stessa come selettore ABS tranne

<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/abs__ab_transparent_light_holo" /> 

tab_indicator_compat_holo.xml

<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/abs__ab_transparent_light_holo" /> 
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/abs__tab_selected_holo" /> 

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

<!-- Pressed --> 
<!-- Non focused states --> 
<item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/abs__list_pressed_holo_dark" /> 
<item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/abs__tab_selected_pressed_holo" /> 

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

Attività

private void initTabs(){ 
    TabHost tabHost = (TabHost)getView().findViewById(android.R.id.tabhost); 
    tabHost.setup(); 

    TabSpec podcasts_all = tabHost.newTabSpec("tab1"); 
    TabSpec podcasts_downloaded = tabHost.newTabSpec("tab2"); 
    TabSpec podcasts_favorite = tabHost.newTabSpec("tab3"); 


    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){ 
     //set divider drawable 

     tabHost.getTabWidget().setDividerDrawable(com.actionbarsherlock.R.drawable.abs__list_divider_holo_light); 

     //set tab titles with custom view 
     podcasts_all.setIndicator(customTabTextView(getSherlockActivity().getString(R.string.PodcastManager_All_Title))); 
     podcasts_downloaded.setIndicator(customTabTextView(getSherlockActivity().getString(
       R.string.PodcastManager_Downloaded_Title))); 
     podcasts_favorite.setIndicator(customTabTextView(getSherlockActivity().getString(
       R.string.PodcastManager_Favorite_Title))); 
    }else{ 
     //set tab titles 
     podcasts_all.setIndicator(getSherlockActivity().getString(R.string.PodcastManager_All_Title)); 
     podcasts_downloaded.setIndicator(getSherlockActivity().getString(
       R.string.PodcastManager_Downloaded_Title)); 
     podcasts_favorite.setIndicator(getSherlockActivity().getString(R.string.PodcastManager_Favorite_Title)); 
    } 


    tabHost.addTab(podcasts_all); 
    tabHost.addTab(podcasts_downloaded); 
    tabHost.addTab(podcasts_favorite); 


    //fill background with selector drawable 
    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){ 
     setTabsBackground(tabHost); 
    } 

} 

private View customTabTextView(String text){ 
    TextView txtTab = new TextView(getActivity()); 
    txtTab.setText(text.toUpperCase()); 
    txtTab.setPadding(0, 5, 0, 0); 
    txtTab.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12); 
    txtTab.setTextColor(Color.DKGRAY); 
    txtTab.setGravity(Gravity.CENTER); 
    txtTab.setTypeface(Typeface.MONOSPACE, Typeface.BOLD); 
    txtTab.setHeight(34); 

    return txtTab; 
} 

private void setTabsBackground(TabHost tabHost) { 
    View v; 
    int count = tabHost.getTabWidget().getTabCount(); 
    for (int i = 0; i < count; i++) { 
     v = tabHost.getTabWidget().getChildTabViewAt(i); 
     v.setBackgroundResource(R.drawable.tab_indicator_compat_holo); 

     ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); 
     //Fix margins in 2.x, by default there is -2 
     params.setMargins(0, 0, 0, 0); 
    } 
}