模仿微信界面tabhost底部导航——使用继承ActivityGroup方式
16lz
2021-01-25
在一般常见的app中,常常会用到底部导航,而android默认的是顶部导航。目前的android版本中,已经不再推荐使用extends TabActivity的方式来创建tabhost,但作为比较常见的一种方式,还是在自己做项目的过程中总结一下。
需要注意的是,每个tabhost选项卡可能是由一个Intent启动的,此时每个选项卡对应一个Activity.废话不多说,帖代码!
Activity:
public class MainActivity extends ActivityGroup{private TabHost tabHost;//资源文件private Class[] activitys = {TabActivity_book.class, TabActivity_search.class, TabActivity_account.class};private String[] titles = {"机票预订", "订单查询", "我的账号"};private int[] images = {R.drawable.book, R.drawable.search, R.drawable.account};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化tab标签tabHost = (TabHost) findViewById(R.id.mytabhost);tabHost.setup(this.getLocalActivityManager());//表明继承TabActivity,由于只能单继承,所以只好在这里写//创建标签for(int i=0; i<activitys.length; i++) {View view = View.inflate(this, R.layout.tab_layout, null);//设置imageViewImageView imageView = (ImageView) view.findViewById(R.id.image);//imageView.setImageDrawable(getResources().getDrawable(images[i]));//设置textViewTextView textView = (TextView) view.findViewById(R.id.title);textView.setText(titles[i]);//设置跳转的IntentIntent intent = new Intent(this, activitys[i]);//设置TabSpecTabSpec spec = tabHost.newTabSpec(titles[i]).setIndicator(view).setContent(intent);tabHost.addTab(spec);}}
布局文件:
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mytabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- 需要一个布局管理器 --> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <!-- 由于TabHost是继承于FrameLayout,所以需要一个FrameLaytout布局(内容页) ,id 必须为tabcontent --> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" > </FrameLayout> <!-- TabWidget必须标签,用来存放tab标签,且id必须为tabs --> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/tab_widget_background" android:layout_alignParentBottom="true" ><!-- android:layout_alignParentBottom="true" --> </TabWidget> </RelativeLayout></TabHost>
注意:
1. activity还能继承自TabHost,此时activity中获取tabhost的代码可这样写:tabHost = getTabHost(),但同时布局文件中tabhost的id必须使用系统自定义的Id:android:id="@android:id/tabhost"
2. 要使导航位于底部,FrameLaytout(内容页)必须放在TabWidget上面。
效果图:
更多相关文章
- 安全新手入坑——HTML标签
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- mono for android software自动更新
- Your Android(安卓)SDK is missing, out of date or corrupted
- Android平台搭建
- Android(安卓)JNI 调用