接着上篇文章直接讲,上一篇文章已经介绍了fragment嵌套fragment的使用,这篇文章就介绍顶层的fragment的使用及简单框架搭建。首先上传一张图,大家先看看效果。
从上图可以看出,以上的这种布局在实际开发中是非常常见的,底部是可以点击的button配上图片,上面是framelayout包裹的内容,关于点击下面切换fragment上面显示内容
有很多种写法,framelayout中可以添加view,也可以放fragment。比较典型的写法就是下面是radiogroup上面是view的写法,但是谷歌也看到了这种经常使用的场景,于是给我们提供了一个V4包,专门用来展示这种界面,那就是fragementtabhost
接下来看代码,我们、会详细的在每一行代码中写上注释:
先看看下mainactivity布局
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:id="@+id/dl_main_darwer" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 抽屉--> <FrameLayout android:id="@+id/fl_main_drawer_left" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="left" android:background="@android:color/white"> </FrameLayout> <!--内容区域--> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </FrameLayout> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="1dp" android:layout_below="@id/realtabcontent" android:background="#cccccc"/> <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginBottom="10dp"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.v4.app.FragmentTabHost> </LinearLayout> </android.support.v4.widget.DrawerLayout>mainactivity
package com.example.administrator.openchinaframe.activity; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentTabHost; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TabHost; import android.widget.TextView; import com.example.administrator.openchinaframe.R; import com.example.administrator.openchinaframe.fragment.fragment1; import com.example.administrator.openchinaframe.fragment.fragment2; import com.example.administrator.openchinaframe.fragment.fragment3; import com.example.administrator.openchinaframe.fragment.fragment4; import com.example.administrator.openchinaframe.fragment.fragment5; import butterknife.Bind; import butterknife.ButterKnife; public class MainActivity extends AppCompatActivity { //获取ID @Bind(R.id.fl_main_drawer_left) FrameLayout mDrawerLeft; @Bind(R.id.realtabcontent) FrameLayout mRealtabcontent; @Bind(R.id.tv) TextView mTv; @Bind(android.R.id.tabcontent) FrameLayout mTabcontent; @Bind(android.R.id.tabhost) FragmentTabHost mTabhost; @Bind(R.id.dl_main_darwer) DrawerLayout mDrawerLayout; private LayoutInflater layoutInflater; //定义一个数组存放fragment private Class fragmentArray[] = {fragment1.class, fragment2.class, fragment3.class, fragment4.class, fragment5.class}; //定义一个数组存放图片 private int mImageViewArray[] = { R.drawable.tab_icon_new, R.drawable.tab_icon_tweet, R.drawable.tab_icon_tweet, R.drawable.tab_icon_explore, R.drawable.tab_icon_me}; //定义一个数组存放图标对应的文字 //Tab选项卡的文字 private String mTextviewArray[] = {"综合", "动弹", "快捷", "发现", "我的"}; private View mView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); //初始化actionbar initactionbar(); //初始化布局 initview(); } private void initview() { //实例化布局对象 layoutInflater = LayoutInflater.from(this); //关联framelayout与tabhost mTabhost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); //设置tabhost之间没有空格线 mTabhost.getTabWidget().setDividerDrawable(null); //获取fragment的个数 int count = fragmentArray.length; //设置每个条目内容 for (int i = 0; i < count; i++) { //为每一个Tab按钮设置图标、文字和内容 TabHost.TabSpec tabSpec = mTabhost.newTabSpec(mTextviewArray[i]).setIndicator(getTabItemView(i)); //将Tab按钮添加进Tab选项卡中 mTabhost.addTab(tabSpec, fragmentArray[i], null); //设置Tab按钮的背景 // mTabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.selector_tab_background); } } /** * 给Tab按钮设置图标和文字 */ private View getTabItemView(int index) { //获取tabhost的文字加按钮图片的布局 mView = layoutInflater.inflate(R.layout.tab_item_view, null); //获取图片ID,获取文字id ImageView imageView = (ImageView) mView.findViewById(R.id.imageview); TextView textView = (TextView) mView.findViewById(R.id.textview); //依据index设置图片内容,其实是图片选择器 imageView.setImageResource(mImageViewArray[index]); //依据index设置文字内容 textView.setText(mTextviewArray[index]); //设置字体颜色 textView.setTextColor(Color.BLACK); return mView; } private void initactionbar() { ActionBar actionbar=getSupportActionBar(); actionbar.setTitle("开源中国"); actionbar.setDisplayHomeAsUpEnabled(true); } }
fragment由于都是一样,这里只给出一个
public class fragment1 extends Fragment{ private static final String TAG = "fragment1"; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { TextView tv=new TextView(getActivity()); tv.setText("fragment1"); return tv; } }图片配合文字的布局tab_item_view.xml布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" > <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:padding="3dp"> </ImageView> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="首页" android:textSize="10sp" android:textColor="#ffffff"> </TextView> </LinearLayout>图片内容的选择器,这里也只给出一个(详细内容大家去看源码)
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/widget_bar_explore_over" /> <item android:state_checked="true" android:drawable="@drawable/widget_bar_explore_over" /> <item android:state_selected="true" android:drawable="@drawable/widget_bar_explore_over" /> <item android:drawable="@drawable/widget_bar_explore_nor" /> </selector>
好了.,就写到这里,大家有什么问题在下面提出来