java底部菜单_Android开发之微信底部菜单栏实现的几种方法汇总

实现方式

实现的方式有很多种 这里总结最常见的几种方式,以后再添加其他的。

viewPager + RadioGroup

viewPager + FragmentTabHost

viewpager +TabLayout

viewPager+RadioGroup

感觉这是最简单的一个了,我也就不贴代码 说说我理解的思路吧

通过给pager 和RadioGroup 添加监听,监听两个控件的变化 实现联动

当viewPager的显示pager改变就会触发监听 ,在监听中选中对应的RadioButton即可

当RadioGroup发生 选中改变时也会触发监听 ,在选中改变后 设置显示对应的pager即可

FragmentTabHost +viewpager

这个方式 跟上面那个方式差不多 都是通过 监听 实现联动

如果只使用FragmentTabHost 只能实现 点击tab切换 页面的效果 不能实现左右滑动 而 结合viewPager 刚好实现这一效果

先来看看FragmentTabHost经常用的方法

- setup() 在使用addTab之前调用 设置必要的数据 如 FragmentManager,Fragment的容器id

- addTab() 添加标签

- newTabSpec() 新建 tab

- setCurrentTab() 设置当前显示的标签

- setOnChangeTabListtener 设置tab选中改变监听

- tabHost.getTabWidget().setDividerDrawable(null); //去除间隔线

- Tab的常用方法:

- setIndicator() 可以设置view 和 字符串

main布局

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

android:id="@+id/activity_tab_pager"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.skymxc.demo.fragment.TabPagerActivity">

android:id="@+id/pager"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1">

android:id="@+id/tab_host"

android:layout_width="match_parent"

android:layout_height="wrap_content">

Framgent 简单起见 就不写布局文件了 其他的Fragment 跟这个类似

public class DiscoverFragment extends Fragment {

@Nullable

@Override

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

TextView textView = new TextView(getActivity());

textView.setText("发现");

textView.setGravity(Gravity.CENTER);

return textView;

}

}

tab 的布局 图片在上 文本在下 比较简单

android:orientation="vertical" android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/icon"

android:layout_width="30dp"

android:layout_height="30dp"

android:layout_gravity="center"/>

android:id="@+id/title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="@color/selector_font"

android:text="发现"

android:layout_gravity="center"/>

selector 基本类似 这里贴一个

java 代码

初始化 TabHost

private void initTabHost() {

tabHost.setup(this,getSupportFragmentManager(), R.id.pager);

tabHost.getTabWidget().setDividerDrawable(null);

tabHost.addTab(tabHost.newTabSpec("discover").setIndicator(createView(R.drawable.selector_bg,"发现")), DiscoverFragment.class,null);

tabHost.addTab(tabHost.newTabSpec("attach").setIndicator(createView(R.drawable.selector_bg_attach,"关注")), AttachFragment.class,null);

tabHost.addTab(tabHost.newTabSpec("message").setIndicator(createView(R.drawable.selector_bg_message,"消息")), MsgFragment.class,null);

tabHost.addTab(tabHost.newTabSpec("info").setIndicator(createView(R.drawable.selector_bg_info,"我的")), ContactFragment.class,null);

}

初始化 pager 并绑定适配器

/**

* 初始化 pager 绑定适配器

*/

private void initPager() {

fragments = new ArrayList<>();

fragments.add(new DiscoverFragment());

fragments.add(new AttachFragment());

fragments.add(new MsgFragment());

fragments.add(new ContactFragment());

FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager(),fragments);

pager.setA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值