2013-11-21 12 views
5

sto usando il ActionBar e voglio impostare una consuetudine View nelle schede di navigazione.Come impostare una visualizzazione personalizzata in schede di navigazione del ActionBar e rendere le schede si adattano alla sua altezza?

L'altezza delle schede sembrano essere fisso, e mia abitudine View è più grande, quindi non va bene.

cerco di personalizzare lo stile come mostrato di seguito, ma non rende le linguette in alto ...

Come posso avere l'altezza delle schede adattarsi al mio costume View dimensioni?

(So che potrei usare Tab s' setIcon e setTitle nel mio caso, ma ho ancora voglia di utilizzare un costume View)

enter image description here

styles.xml

<resources> 
    <style name="AppBaseTheme" parent="android:Theme.Holo"> 
    </style> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <item name="android:actionBarTabStyle">@style/MyTabStyle</item> 
    </style> 

    <style name="MyTabStyle" parent="@android:Widget.ActionBar.TabView"> 
     <item name="android:height">85dp</item> 
    </style> 
</resources> 

custom_tab.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="wrap_content" 
    android:orientation="vertical" 
    android:gravity="center_horizontal" > 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:scaleType="centerInside" /> 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:maxLines="1" /> 

</LinearLayout> 

MainActivity.java

public class MainActivity extends FragmentActivity implements 
ActionBar.TabListener { 

    SectionsPagerAdapter mSectionsPagerAdapter; 

    ViewPager mViewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Set up the action bar. 
     final ActionBar actionBar = getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // Create the adapter that will return a fragment for each of the three 
     // primary sections of the app. 
     mSectionsPagerAdapter = new SectionsPagerAdapter(
       getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     // When swiping between different sections, select the corresponding 
     // tab. We can also use ActionBar.Tab#select() to do this if we have 
     // a reference to the Tab. 
     mViewPager 
     .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       actionBar.setSelectedNavigationItem(position); 
      } 
     }); 

     // For each of the sections in the app, add a tab to the action bar. 
     for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
      // Create a tab with text corresponding to the page title defined by 
      // the adapter. Also specify this Activity object, which implements 
      // the TabListener interface, as the callback (listener) for when 
      // this tab is selected. 

      LinearLayout view = (LinearLayout) getLayoutInflater().inflate(R.layout.custom_tab, null); 

      ImageView icon = (ImageView) view.findViewById(R.id.icon); 
      icon.setImageResource(R.drawable.about); 

      TextView title = (TextView) view.findViewById(R.id.title); 
      title.setText("About"); 


      actionBar.addTab(actionBar.newTab() 
        //.setText(mSectionsPagerAdapter.getPageTitle(i)) 
        .setCustomView(view) 
        .setTabListener(this)); 
     } 
    } 

    /*****/ 
} 

risposta

0

questo mantenere l'ActionBar sulla parte superiore, ma io non so perché!

ActionBar.DISPLAY_SHOW_HOME 

il soggiorno ActionBar nella top:

actionbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME); 

le schede vanno in cima alla ActionBar:

actionbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM 
0

per quanto ne so, non è possibile modificare l'altezza delle azioni linguette bar. Ma è possibile ottenere il comportamento previsto utilizzando un TabHost insieme a un ViewPager. In questo modo è possibile aggiungere visualizzazioni personalizzate ai tuoi TabIndicators e hanno anche la funzionalità strisciata.

Problemi correlati