您的位置:首页 > 移动开发 > Android开发

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

2014-08-28 11:59 525 查看
最近在想在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;,导入后者会报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: