2013-11-21 10 views
5

ActionBarを使用しており、ナビゲーションタブにカスタムViewを設定したいとします。ActionBarのナビゲーションタブでカスタムビューを設定し、タブをその高さに適応させる方法は?

タブの高さは固定されているように見えますが、私のカスタムViewはそれより大きく、フィットしません。

私は下図のようにスタイルをカスタマイズしようとするが、それはタブが高いことはありません...

どのように私は、タブの高さは私のカスタムViewサイズに適応することができますか?

(私は私の場合にはTabsetIconsetTitleを使用することができます知っているが、私はまだカスタム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)); 
     } 
    } 

    /*****/ 
} 

答えて

0

この上にアクションバーを維持し、しかし、私はなぜ知りません!

ActionBar.DISPLAY_SHOW_HOME 

トップでアクションバーの滞在:

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

タブがアクションバーの上に行く:

actionbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM 
0

私の知る限り、あなたは行動の高さを変更することはできませんバータブ。しかし、ViewPagerと一緒にTabHostを使うことで、意図した動作を達成することができます。 この方法で、TabIndicatorsにカスタムビューを追加したり、スワイプ機能を持つことができます。

関連する問題