Android 你或许不知道的另外一种首页导航布局FragmentTabHost+FrameLayout
有问题可以QQ讨论:1070800492
FragmentTabHost是安卓V4下的一种控件:布局是:android.support.v4.app.FragmentTabHost,喜欢的盆友可以直接去看他的源码,这里我就不详细介绍了(其实我也没看,【丶汗】)
难度:初级 适用人群:新手 适用地方:首页导航功能按钮
接下来不罗嗦,直接讲解如何使用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"></FrameLayout>
<android.support.v4.app.FragmentTabHost
android:id="@+id/tabHost"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v4.app.FragmentTabHost>
</LinearLayout>
- 布局是我们经常简单的导航栏+FrameLayout布局样式,就不多说了下面是精华代码
private void initView() {
fragmentTabHost = (FragmentTabHost) findViewById(R.id.tabHost);
mFragmentTitles = getResources().getStringArray(R.array.fragment_titles); //String[] mFragmentTitles
mFragmentTabHost = (FragmentTabHost) findViewById(R.id.tabhost); //FragmentTabHost mFragmentTabHost
mFragmentTabHost.setup(this, getSupportFragmentManager(), R.id.frame_content); //给tab设备对应的视图
for (int i = 0; i < mFragmentTitles.length; i++) {
//给每一个tab设备图标和文字内容
TabSpec ts = mFragmentTabHost.newTabSpec(mFragmentTitles[i]);
ts.setIndicator(mFragmentTitles[i]);
switch (i) {
case FRAGMENT_SCAN:
mFragmentTabHost.addTab(ts, ScanFragment.class, null); //按钮添加到tab选项中
mFragmentTabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.color.black);//设备tab按钮背景
break;
case FRAGMENT_CONNECTED:
mFragmentTabHost.addTab(ts, ConnectedFragment.class, null);
break;
}
updateTab(fragmentTabHost);
}
/**
* 更新Tab标签的颜色,和字体的颜色
*
* @param tabHost
*/
private void updateTab(final TabHost tabHost) {
for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
View view = tabHost.getTabWidget().getChildAt(i);
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
tv.setTextSize(16);
tv.setTypeface(Typeface.SERIF, 2); // 设置字体和风格
if (tabHost.getCurrentTab() == i) {//选中
tv.setTextColor(this.getResources().getColorStateList(android.R.color.black));
} else {//不选中
tv.setTextColor(this.getResources().getColorStateList(android.R.color.white));
}
}
}
- 可能有的童鞋在复制的时候发现:R.array.fragment_title这是个神马?不急往下看
<!--在资源文件声明导航功能的名称-->
<string-array name="fragment_title">
<item>功能一</item>
<item>功能二</item>
<item>功能三</item>
</string-array>
- 我的代码(/哭)拿去不谢。。。 题外话:当然一般在写fragment的时候最好写一个BaseFragement把公共的方法和方法写在里面,用起来爽歪歪。
题外话:谢谢大家观看,有不足之处欢迎大家一起讨论;码字不易,大家喜欢,麻烦点赞哦。
灵魂三问:
- 有没有觉得技术得不到系统的提升,技术成长慢?
- 有没面试懵逼,升职加薪难?
- 有没有想过去大一点的世界看看?
有期望JAVA技术巩固的、Android知识进阶的、期望升职加薪的、Android面试技巧的、大厂面试真题的;大家可以加我QQ哦:1070800492。我们一起学习,一起进步!
重要的事情说三遍:
- 学习、挣钱、自由
- 学习、挣钱、自由
- 学习、挣钱、自由
疫情当下,唯有自强