我的博客
Fragment学习3–底部tab布局
https://blog.csdn.net/qq_26296197/article/details/81146319

布局结构

用的是google比较新的结构 TabLayout做为底部布局,在新闻类的app中tab切换,都是用tablayout写的

<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    "@layout/include_toolbar"/>    .support.v4.view.ViewPager        android:id="@+id/vp_content"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1">    .support.v4.view.ViewPager>    .support.design.widget.TabLayout        android:id="@+id/tl_tab"        android:layout_width="match_parent"        android:layout_height="@dimen/dp_56"        android:background="@color/white">    .support.design.widget.TabLayout>

Activity

public class TabLayoutBottomActivity extends BaseActivity {    private TabLayout mTabTl;    private ViewPager mContentVp;    private List tabIndicators;    private List tabFragments;    private ContentPagerAdapter contentAdapter;    public static void startActivity(Context context ){        Intent intent = new Intent(context, TabLayoutBottomActivity.class);        context.startActivity(intent);    }    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_tab_layout_bottom);        mTabTl = (TabLayout) findViewById(R.id.tl_tab);        mContentVp = (ViewPager) findViewById(R.id.vp_content);        initContent();        initTab();    }    private void initTab(){        mTabTl.setTabMode(TabLayout.MODE_FIXED);        mTabTl.setSelectedTabIndicatorHeight(0);        ViewCompat.setElevation(mTabTl, 10);        mTabTl.setupWithViewPager(mContentVp);        for (int i = 0; i < tabIndicators.size(); i++) {            TabLayout.Tab itemTab = mTabTl.getTabAt(i);            if (itemTab!=null){                itemTab.setCustomView(R.layout.item_tab_layout_custom);                TextView itemTv = (TextView) itemTab.getCustomView().findViewById(R.id.tv_menu_item);                itemTv.setText(tabIndicators.get(i));            }        }        mTabTl.getTabAt(0).getCustomView().setSelected(true);    }    private void initContent(){        tabIndicators = new ArrayList<>();        for (int i = 0; i < 4; i++) {            tabIndicators.add("Tab " + i);        }        tabFragments = new ArrayList<>();        for (String s : tabIndicators) {            tabFragments.add(TabContentFragment.newInstance(s));        }        contentAdapter = new ContentPagerAdapter(getSupportFragmentManager());        mContentVp.setAdapter(contentAdapter);    }    class ContentPagerAdapter extends FragmentPagerAdapter {        public ContentPagerAdapter(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int position) {            return tabFragments.get(position);        }        @Override        public int getCount() {            return tabIndicators.size();        }        @Override        public CharSequence getPageTitle(int position) {            return tabIndicators.get(position);        }    }}

字体颜色选择器

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_checked="true" android:color="@color/blue">item>    <item android:color="@color/gray">item>selector>

重点,下面代码的含义

       mTabTl.setTabMode(TabLayout.MODE_FIXED); //让底部tab处于可以适配的状态(类似wrap_content),占满屏幕       mTabTl.setSelectedTabIndicatorHeight(0); //让指示器高度为0       ViewCompat.setElevation(mTabTl, 10);//设置底部阴影为10px,位置在于viewpager相交的地方       mTabTl.setupWithViewPager(mContentVp); //管理viewpager      //设置自定义底部布局      itemTab.setCustomView(R.layout.item_tab_layout_custom);      mTabTl.getTabAt(0).getCustomView().setSelected(true);
public class TabContentFragment extends Fragment {    private static final String EXTRA_CONTENT = "content";    public static TabContentFragment newInstance(String content){        Bundle arguments = new Bundle();        arguments.putString(EXTRA_CONTENT, content);        TabContentFragment tabContentFragment = new TabContentFragment();        tabContentFragment.setArguments(arguments);        return tabContentFragment;    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View contentView = inflater.inflate(R.layout.fragment_tab_content, null);        ((TextView)contentView.findViewById(R.id.tv_content)).setText(getArguments().getString(EXTRA_CONTENT));        return contentView;    }}

小结

显示这种方式是一次性,把所有的子fragment对象加入进来 ,对于大型的app,需要初始化的地方很多,这种方式可能会很占内存。但是对于一个Activity的子模块,这种方式就是非常的方便和简单的,写代码起来会很快的完成任务。

相对于fragment学习3中,那种方式适合作为app的架构–底部布局,因为它没有一次性的把所有fragment加入进去,它只是加入第一个fragment。

android fragment学习5–fragment扩展 TabLayout非自定义
https://blog.csdn.net/qq_26296197/article/details/81146989

更多相关文章

  1. Android创建快捷方式
  2. Android(安卓)EditText设置Filter以后,xml布局文件中maxLength不
  3. Android开发:界面布局的基本使用
  4. Android(安卓)studio APP开发 控制UI布局的方式,用代码书写UI界面
  5. android软键盘以及输入法影响界面布局的问题
  6. android View移动的四种方式
  7. MonoDroid学习笔记(九)—— 控件大串烧,在Android上做一个CSDN的注
  8. Android让Fragment加载到Activity中
  9. Android开发-UI开发

随机推荐

  1. Android(安卓)SSL BKS证书的生成过程
  2. Android(安卓)where 长度限制
  3. 使用大量checkbox的时候可能出现的小问题
  4. [cocos2d-x 学习] Windows下环境配置
  5. Android访问中央气象台的天气预报API得到
  6. 编译Android 4.0.3的常见错误
  7. 使用viewpager切换fragment加载两个webvi
  8. ubuntu16.04 openblas库安卓arm64-v8a编
  9. Android Studio使用基础和常用快捷键
  10. Android greenDao数据库的简单使用(一)