首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:如何构建多层标签

Android:如何构建多层标签
EN

Stack Overflow用户
提问于 2015-12-14 06:35:24
回答 2查看 2K关注 0票数 3

我想在android中创建多级选项卡。它应该遵循多层次的层次结构,或嵌套的标签哲学,如图像所示。如有需要,请提供连结或网址。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-14 06:40:56

使用Android的多层TabLayout,参考。TabLayout非常具有自定义功能。例如,添加选项卡,设置分隔高度,在选项卡中使用自定义视图。

票数 0
EN

Stack Overflow用户

发布于 2015-12-14 08:38:15

您应该使用ViewPager来做到这一点。下面的代码将帮助您在android中建立多级选项卡。

view_pager_main.xml

代码语言:javascript
复制
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            style="@style/MyCustomTabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="fill"
            app:tabIndicatorColor="@android:color/white"
            app:tabIndicatorHeight="3dp"
            app:tabMode="fixed"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

    </FrameLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white" />

    <TextView
        android:id="@+id/tvNoPlans"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="No Plans Available"
        android:textColor="@android:color/black"
        android:visibility="gone" />

</android.support.design.widget.AppBarLayout>

view_pager_child.xml

代码语言:javascript
复制
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout_child"
            style="@style/MyCustomTabLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="center"
            app:tabIndicatorColor="@color/btn_background"
            app:tabIndicatorHeight="3dp"
            app:tabMode="scrollable"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

    </FrameLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@android:color/darker_gray"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager_child"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white" />

</android.support.design.widget.AppBarLayout>

ViewPagerMain.java

代码语言:javascript
复制
public class ViewPagerMain extends Fragment {

    ViewPager viewpager;
    TabLayout tabLayout;
    TextView tvNoPlans;

    View rootview;
    Fragment fr = null;

    ArrayList<String> cat_id = new ArrayList<String>();
    ArrayList<String> cat_name = new ArrayList<String>();

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        rootview = inflater.inflate(R.layout.view_pager_main, container, false);

        tvNoPlans = (TextView) rootview.findViewById(R.id.tvNoPlans);
        viewpager = (ViewPager) rootview.findViewById(R.id.viewpager);
        viewpager.setOffscreenPageLimit(3);

        tabLayout = (TabLayout) rootview.findViewById(R.id.tabLayout);

        cat_id.add(0,"1");
        cat_id.add(1,"2");

        cat_name.add(0,"Parent1");
        cat_name.add(1,"Parent2");

        setupViewpager(viewpager);
        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                tabLayout.setupWithViewPager(viewpager);
            }
        });

        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) {

            }
        });
        return rootview;
    }

    public void setupViewpager(ViewPager viewPager) {

        ViewpagerAdapter adapter = new ViewpagerAdapter(getChildFragmentManager());

        for (int i = 0; i < cat_id.size(); i++) {
            Bundle bundle = new Bundle();
            bundle.putString("cat_id",cat_id.get(i));
            fr = new ViewPagerChild();
            fr.setArguments(bundle);
            adapter.addFrag(fr, cat_name.get(i));
        }
        viewPager.setAdapter(adapter);
    }
}

ViewPagerChild.java

代码语言:javascript
复制
public class ViewPagerChild extends Fragment {

    ViewPager viewPager_child;
    TabLayout tabLayout_child;
    SharedPreferences preferences;
    View rootview;
    String cat_id;

    ArrayList<String> subcat_id = new ArrayList<String>();
    ArrayList<String> subcat_name = new ArrayList<String>();

    Bundle bundle;
    Fragment fr = null;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootview = inflater.inflate(R.layout.view_pager_child, container, false);
        preferences = getActivity().getSharedPreferences(Constant.PREF_MAIN, 0);

        bundle = getArguments();
        cat_id = bundle.getString("cat_id");

        viewPager_child = (ViewPager) rootview.findViewById(R.id.viewpager_child);
        viewPager_child.setOffscreenPageLimit(10);

        tabLayout_child = (TabLayout) rootview.findViewById(R.id.tabLayout_child);

        subcat_id.add(0,"1");
        subcat_id.add(1, "2");

        subcat_name.add(0,"Child1");
        subcat_name.add(1,"Child2");

        setupViewpagerChild(viewPager_child);
        tabLayout_child.post(new Runnable() {
            @Override
            public void run() {
                tabLayout_child.setupWithViewPager(viewPager_child);
            }
        });

        tabLayout_child.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager_child.setCurrentItem(tab.getPosition());
            }

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

            }

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

            }
        });
        return rootview;
    }

    public void setupViewpagerChild(ViewPager viewPager_child) {
        ViewpagerAdapter adapter = new ViewpagerAdapter(getChildFragmentManager());

        for (int i = 0; i < subcat_id.size(); i++) {

            fr = new TabFragment();
            adapter.addFrag(fr, subcat_name.get(i));
        }
        viewPager_child.setAdapter(adapter);
    }
}

ViewpagerAdapter.java

代码语言:javascript
复制
public class ViewpagerAdapter extends FragmentPagerAdapter {

    private final List<android.app.Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewpagerAdapter(FragmentManager manager){
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }

    public void addFrag(Fragment fragment,String title){
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }
}

tab_fragment.xml

代码语言:javascript
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:text="Hello There!!!"/>

</LinearLayout>

TabFragment.java

代码语言:javascript
复制
public class TabFragment extends Fragment {

    View rootview;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootview = inflater.inflate(R.layout.fragment_tab, container, false);

        return rootview;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34261057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档