2023年7月15日发(作者:)
Android实现顶部底部双导航界⾯功能最近想弄⼀个双导航功能,查看了许多资料,总算是实现了功能,这边就算是给⾃⼰⼏个笔记吧!先来看看效果
那么就开始实现了!底部导航栏我选择⽤FragmentTabHost+Fragment来实现,这个⽅法我觉得挺好⽤的,代码量也不多⾸先是开始的activity_
class="ntTabHost" />
package gation;import ;import ntActivity;import ntTabHost;import Inflater;import ;import ;import iew;import get;import ew;import hangeListener;import c;public class MainActivity extends FragmentActivity implements OnTabChangeListener { private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { te(savedInstanceState); requestWindowFeature(E_NO_TITLE); setContentView(ty_main);
//初始化FragmentTabHost initHost(); //初始化底部导航栏 initTab(); //默认选中 hanged(sTxt()[0]); } private void initTab() { String[] tabs = sTxt(); for (int i = 0; i < ; i++) { //新建TabSpec TabSpec tabSpec = Spec(sTxt()[i]); //设置view View view = (this).inflate(_foot, null); ((TextView) ewById(_tv)).setText(sTxt()[i]); ((ImageView) ewById(_iv)).setImageResource(sImg()[i]); icator(view); //加⼊TabSpec (tabSpec,mgent()[i],null); } } /*** * 初始化Host */ private void initHost() { mTabHost = (FragmentTabHost) findViewById(_tab); //调⽤setup⽅法 设置view (this, getSupportFragmentManager(),_view); //去除分割线 Widget().setDividerDrawable(null); //监听事件 abChangedListener(this); } @Override public void onTabChanged(String arg0) { //从分割线中获得多少个切换界⾯ TabWidget tabw = Widget(); for (int i = 0; i < ldCount(); i++) { View v = ldAt(i); TextView tv = (TextView) ewById(_tv);
ImageView iv = (ImageView) ewById(_iv); //修改当前的界⾯按钮颜⾊图⽚ if (i == rentTab()) { tColor(getResources().getColor(_light_color)); geResource(sImgLight()[i]); }else{ tColor(getResources().getColor(_color)); geResource(sImg()[i]); } } }} 其中TabDb类是⽤来设置导航栏的数据和图⽚切换时候的资源 以下是TabDb类package gation;public class TabDb { /*** * 获得底部所有项 */ public static String[] getTabsTxt() { String[] tabs = {"⾸页","交易","地点","我的"}; return tabs; } /*** * 获得所有碎⽚ */ public static Class[] getFramgent(){ Class[] cls = {,,,}; return cls ; } /*** * 获得所有点击前的图⽚ */ public static int[] getTabsImg(){ int[] img = {1,1,1,1}; return img ; } /*** * 获得所有点击后的图⽚ */ public static int[] getTabsImgLight(){ int[] img = {2,2,2,2}; return img ; }} 到此,底部导航栏就算是完全实现了。 现在来实现顶部导航栏,看了许多最后使⽤了RadioGroup+ViewPager来实现⾸先是为第⼀个碎⽚设计⼀个xml布局fm_
@Override public void onCheckedChanged(RadioGroup group, int id) { vp_.setCurrentItem(id); } }); //初始化顶部导航栏 initTab(inflater); //初始化viewpager initView(); } /* * 底部导航栏切换后 由于没有销毁顶部设置导致如果没有重新设置view * 导致底部切换后切回顶部页⾯数据会消失等bug * 以下设置每次重新创建view即可 */ ViewGroup parent = (ViewGroup) ent(); if (parent != null) { View(view); } return view; } /*** * 初始化viewpager */ private void initView() { List
} @Override public void onPageScrolled(int arg0, float arg1, int arg2) {
} @Override public void onPageSelected(int id) { setTab(id); } /*** * 页⾯跳转切换头部偏移设置 * @param id */ private void setTab(int id) { RadioButton rbButton = (RadioButton) rg_.getChildAt(id); //设置标题被点击 cked(true); //偏移设置 int left = t(); int width = suredWidth(); DisplayMetrics metrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics); int screenWidth = ixels; //移动距离= 左边的位置 + button宽度的⼀半 - 屏幕宽度的⼀半 int len = left + width / 2 - screenWidth / 2; //移动 hv_.smoothScrollTo(len, 0); }} 其中有两个数据类和⼀个碎⽚类数据类
package gation;/*** * 头部Tab属性 * */public class HTab { private String name; public HTab(String name) { super(); e(name); } public String getName() { return name; } public void setName(String name) { = name; }
}
package gation;import ist;import ;public class HTabDb { private static final List
下载地址:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689428863a246683.html
评论列表(0条)