2012-11-03 22 views
6

मुझे आश्चर्य है कि क्या मूल TabWidget पर ActionBarSherlock (v4.2.0) TabWidget थीम लागू करना संभव है? तो यह पूर्व आईसीएस एंड्रॉइड पर होलो की तरह दिखता है। यदि आप जानते हैं - कृपया साझा करें।क्या देशी TabWidget पर ActionBarSherlock शैली का उपयोग करना संभव है?

मुझे यह सब मिला है: https://gist.github.com/1126843 लेकिन ऐसा लगता है कि अब और काम नहीं है।

स्टैंडर्ड 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> 

उत्तर

3

मैं कुछ समाधान अपने आप को मिल गया।

लगभग छोड़कर

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

गतिविधि

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); 
    } 
} 
एबीएस चयनकर्ता के रूप में ही: यह शुद्ध एबीएस संसाधन नहीं लेकिन का उपयोग कम से कम अतिरिक्त चीजें है