【问题标题】:Navigation Drawer among tabs选项卡之间的导航抽屉
【发布时间】:2015-10-25 07:23:34
【问题描述】:

我正在尝试同时实现选项卡和导航抽屉。 我已经成功实现了选项卡,我开始插入导航抽屉,现在就在我的 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;
}
}

【问题讨论】:

  • 你遇到任何问题或任何意外的结果

标签: android android-fragments tabs navigation


【解决方案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" 以从左到右更改navigationdrawer 位置

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多