这是一个比较常见的底部菜单栏模式,网上相关的代码也很多,最近项目中接触到了,觉得以后会常用,自己记录一下,里面有注释,大家也可以参考一下~
MainActivity.java
package com.example.myfragment;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TabHost.TabSpec;
public class MainActivity extends FragmentActivity {
public static FragmentTabHost fragmentTabHost;
// 定义一个布局
private LayoutInflater layoutInflater;
// 定义数组来存放Fragment界面
private Class fragmentArray[] = { Fragment1.class, Fragment2.class,
Fragment3.class, Fragment4.class };
private int mImageViewArray[] = { R.drawable.tab_home_btn,
R.drawable.tab_message_btn, R.drawable.tab_selfinfo_btn,
R.drawable.tab_square_btn };
private String mTextViewArray[] = { "首页", "贴吧", "游戏", "发现" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取layoutInflater实例
layoutInflater = LayoutInflater.from(MainActivity.this);
fragmentTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
// 初始化fragmentTabHost
fragmentTabHost.setup(getApplicationContext(),
getSupportFragmentManager(), R.id.tabcontent);
int count = fragmentArray.length;
for (int i = 0; i < count; i++) {
// 创建分页面
TabSpec tabSpec = fragmentTabHost.newTabSpec(mTextViewArray[i])
.setIndicator(tabItemView(i));
// 分页面与fragment绑定并添加到到tabhost上
fragmentTabHost.addTab(tabSpec, fragmentArray[i], null);
// 点击时改变child(i)的颜色
fragmentTabHost.getTabWidget().getChildAt(i)
.setBackgroundResource(R.color.tabhost);
// 设置初始tab的位置
fragmentTabHost.setCurrentTab(0);
}
}
// 设置tabItem的文字和图片
private View tabItemView(int index) {
View view = layoutInflater.inflate(R.layout.tab_item_view, null);
ImageView imageView = (ImageView) view.findViewById(R.id.imageview);
TextView textView = (TextView) view.findViewById(R.id.textview);
imageView.setImageResource(mImageViewArray[index]);
textView.setText(mTextViewArray[index]);
return view;
}
}
activity_main.xml
(ps:tabhost如果写在tabcontent上面,是底部菜单栏;反之,则是顶部菜单栏)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</FrameLayout>
<android.support.v4.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</android.support.v4.app.FragmentTabHost>
</LinearLayout>
</FrameLayout>
<?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_horizontal"
android:background="#ebedf0"
android:orientation="vertical" >
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="28dp"
android:layout_marginTop="4dp" >
<ImageView
android:id="@+id/imageview"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="top"
android:layout_marginTop="2dp"
android:src="@drawable/tab_home_btn"
android:focusable="false" />
<TextView
android:id="@+id/update"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_gravity="top|right"
android:layout_marginRight="6dp"
android:background="@drawable/dian_1"
android:visibility="gone" />
</FrameLayout>
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginBottom="2dp"
android:layout_marginTop="2dp"
android:text="首页"
android:textColor="@drawable/tab_text_selected"
android:textSize="11sp" />
</LinearLayout>
接下来Fragment就不一一写了,以Fragment1为例:
Fragment1.java
package com.example.myfragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment1 extends Fragment{
private View view;
private Activity activity;
private LayoutInflater layoutInflater;
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup viewGroup = (ViewGroup) view.getParent();
if (viewGroup != null) {
viewGroup.removeAllViewsInLayout();
}
return view;
}
private void initView(){
activity = getActivity();
layoutInflater = activity.getLayoutInflater();
view = layoutInflater.inflate(R.layout.fragment1, null);
}
@Override
public void onResume(){
super.onResume();
}
}
fragment1.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity="center"
android:text="fragment1"
android:textSize="40dp" />
</RelativeLayout>
真机测试如下: