android4平台用FragmentActivity代替TabActivity实现分页功能

最近在想在android4上实现分页效果,但是发现TabActivity已经被弃用了,在网上查到可以用FragmentActivity来替换TabActivity来实现该功能,下面是我写的一份代码:

第一步:向工程中导入android-support-v4.jar包,步骤可参考http://www.cnblogs.com/ada-zheng/archive/2013/08/02/3231944.html

第二步:在res下新建一个drawable文件夹,存放的xml文件用于实现选择Tab选中与否时显示的图片效果,呃。。。,这样说确实蛮难懂的,其实就是<selector></selector>选项,下面是代码:(此处只贴一个)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/file_sel_48" android:state_selected="true"></item>
    <item android:drawable="@drawable/file_nor_48"></item>
</selector>

第三步:主界面activity_main_tab.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <FrameLayout
        android:id="@+id/realTabContent" 
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        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:background="@drawable/maintab_toolbar_bg" >
        <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>

每个Tab的布局文件tab_item_view.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" >
    <ImageView
        android:id="@+id/picImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/hello_world"
        android:focusable="false"
        android:padding="3dp"
        android:src="@drawable/tab_planestate_btn" />
    <TextView
        android:id="@+id/planeStateTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="State"
        android:textColor="#ffffff"
        android:textSize="12sp" />
</LinearLayout>

第四步:新建四个类,都继承Fragment类(此处只贴一个)

package com.example.testfortaskui_01;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;




public class FileFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.file_fragment, null);
}
}

第五步:主界面

MainTabActivity:

package com.example.testfortaskui_01;


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.TabHost.TabSpec;
import android.widget.TextView;


public class MainTabActivity extends FragmentActivity {
// 声明一个FragmentTabHost对象
private FragmentTabHost mTabHost;
// 定义一个布局
private LayoutInflater layoutInflater;
// 定义数组来存放Fragment界面
private Class fragmentArray[] = { PlaneStateFragment.class,
ParameterFragment.class, FileFragment.class, SettingFragment.class };
// 定义数组来存放按钮图片
private int mImageViewArray[] = { R.drawable.tab_planestate_btn,
R.drawable.tab_parameters_btn, R.drawable.tab_file_btn,
R.drawable.tab_setting_btn };
// Tab选项卡的文字
private String mTextViewArray[] = { "State", "Parameter", "File", "Setting" };


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_tab);
initView();
}


/**
 * 初始化组件
 */
private void initView() {
// 实例化布局对象
layoutInflater = LayoutInflater.from(this);
// 实例化TabHost对象,得到TanHost
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realTabContent);
// 得到Fragment的个数
int count = fragmentArray.length;


for (int i = 0; i < count; i++) {
// 为每个Tab按钮设置图标、文字和内容
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按钮设置图标和文字
 * 
 * @param index
 * @return
 */
private View getTabItemView(int index) {
View view = layoutInflater.inflate(R.layout.tab_item_view, null);
ImageView imageView = (ImageView) view.findViewById(R.id.picImageView);
imageView.setImageResource(mImageViewArray[index]);


TextView textView = (TextView) view
.findViewById(R.id.planeStateTextView);
textView.setText(mTextViewArray[index]);


return view;
}
}

效果:

源代码下载地址:http://download.csdn.net/detail/dengfengdeling/7832341

参考代码:http://download.csdn.net/detail/yangyu20121224/5511157

上述图片使用的是参考代码中的图片!!!

注意:1、一定要导入android-support-v4.jar包

   2、在写各个界面的Fragment界面时注意,继承Fragment后import的 是import android.support.v4.app.Fragment;,而不是import android.app.Fragment;,导入后者会报错


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值