您的位置:首页 > 其它

FragmentTabHost

2016-05-23 12:23 302 查看
FragmentTabHost
联合
Fragment
可以方便的实现导航页面模式。

下面再代码中简介:

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>

<android.support.v4.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#33b5e5"
>
<!--<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight ="0">
</FrameLayout>-->
</android.support.v4.app.FragmentTabHost>
</LinearLayout>

fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#6998bb"
android:orientation="vertical">

</LinearLayout>

其中一个Fragment.java示例,其它都一样

public class Fragment1 extends Fragment {

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_tabpager1,container,false);
}
}

activity.java

public class HomeActivity extends FragmentActivity {

private FragmentTabHost mFragmentTabHost;
private FrameLayout container;
private String[] tabTitles;
private Class[] fragments;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
initView();

}

private void initView() {
mFragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
//相当于是初始化FragmentTabHost,重要参数就是FragmentManager了,它用于后面自动创建Fragment
//第三个参数如果不指定的话,它将用自带的容器来装页面
mFragmentTabHost.setup(this,getSupportFragmentManager(),R.id.container);
container = (FrameLayout) findViewById(R.id.container);

tabTitles = new String[]{"附近", "热门", "探索", "我的"};
//创建一个Fragment集合
fragments = new Class[]{Fragment1.class, Fragment2.class, Fragment3.class, Fragment4.class};

for (int i = 0; i < fragments.length; i++) {
//创建导航标签
TabHost.TabSpec tabSpec = mFragmentTabHost
//获得一个TabSpec,参数它的标签,
// 通过调用mFragmentTabHost.getCurrentTabTag()可以获得当前标签
.newTabSpec(tabTitles[i])
//指定一个View作为该Tab的指示器,这个View可以是任意的
.setIndicator(getIndicator(i));
//为FragmentTabHost添加一个Fragment,它可以根据类名自动创建Fragment,
//最后一个参数Bundle是被FragmentTabHost内部的TabInfo所持有的,
//当然与TabSpec对应的Fragment的tag就是该TagSpec的tag
mFragmentTabHost.addTab(tabSpec, fragments[i], null);
//通过这个方法可以获得对应位置的Tab的View,然后给他设置背景选择器
mFragmentTabHost.getTabWidget().getChildAt(i)
.setBackgroundResource(R.drawable.selector_tab_background);
//这个方法可以设置分隔线,null为没有分隔线
mFragmentTabHost.getTabWidget().setDividerDrawable(null);
}
}

/**
* 获取背景选择器
* @param position tab的位置
* @return
*/
private View getIndicator(int position) {
View view = LayoutInflater.from(this).inflate(R.layout.item_tab, null);
ImageView imageView = (ImageView) view.findViewById(R.id.iv_tabImage);
imageView.setImageResource(R.drawable.cat);
TextView textView = (TextView) view.findViewById(R.id.tv_tabTitle);
textView.setText(tabTitles[position]);
return view;
}
}


效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: