选项卡中的导航抽屉

时间:2015-10-25 07:23:35

标签: android android-fragments tabs navigation

我正在尝试实现标签和导航抽屉。 我已经成功实现了标签,我开始插入导航抽屉,现在只在我的activity_main.xml布局中。 我不知道如何在我的主要活动中实现这一点,因为我发现的所有教程都没有使用我用于标签的相同结构。

理想情况下,我希望点击最后一个标签,导航抽屉从右边打开,就像我可以屏蔽ActionBar一样(像Airbnb那样) 我认为可以通过在操作栏上移动我的标签,或者单击选项卡图标来打开导航抽屉(我认为更简单)。 如果不可能,请保持我的滑动标签和他们的“链接”仅低于操作栏。

您如何认为我可以激活/显示和填充我的导航抽屉,而不会打扰我的标签?

activity_main.xml中

<LinearLayout
android:id="@+id/main_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:background="?attr/colorPrimary"
    android:elevation="6dp"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/toolbar"
    android:background="?attr/colorPrimary"
    android:elevation="6dp"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/tab_layout"/>

</android.support.v4.widget.DrawerLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
private int[] tabIcons = {
        R.drawable.ic_discover_tab,
        R.drawable.ic_planning_tab,
        R.drawable.ic_favorite_tab,
        R.drawable.ic_message_tab,
        R.drawable.ic_account_tab
};

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    //getSupportActionBar().setDisplayHomeAsUpEnabled(true); //Fleche de retour
    //getSupportActionBar().setDisplayShowHomeEnabled(false);  // hides action bar icon
    //getSupportActionBar().setDisplayShowTitleEnabled(false); // hides action bar title

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    for (int i=0; i<=4; i++) {
        tabLayout.addTab(tabLayout.newTab().setIcon(tabIcons[i]));//.setText("D").setIcon()
    }
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    final PagerAdapter adapter = new PagerAdapter (getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

    //Launch login activity
    Intent intent = new Intent(this, LoginActivity.class);
    startActivity(intent);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

PagerAdapter.java

public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;

public PagerAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            Tab1Discover tab1 = new Tab1Discover();
            return tab1;
        case 1:
            Tab2Planning tab2 = new Tab2Planning();
            return tab2;
        case 2:
            Tab3Favorites tab3 = new Tab3Favorites();
            return tab3;
        case 3:
            Tab4Messages tab4 = new Tab4Messages();
            return tab4;
        case 4:
            Tab5Profile tab5 = new Tab5Profile();
            return tab5;
        default:
            return null;
    }
}

@Override
public int getCount() {
    return mNumOfTabs;
}
}

1 个答案:

答案 0 :(得分:1)

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:id="@+id/drawerLayout"
    android:layout_height="match_parent">


            <RelativeLayout
                android:layout_gravity="start"
                android:layout_width="240dp"
                android:layout_height="match_parent">

                 </RelativeLayout>
</android.support.v4.widget.DrawerLayout>

android:layout_gravity="start"更改为android:layout_gravity="end"以将导航工具位置从左向右更改