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;,导入后者会报错
第一步:向工程中导入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;,导入后者会报错
相关文章推荐
- android-activity中fragment实现分页
- Android开发使用Activity嵌套多个Fragment实现横竖屏切换功能的方法
- 移植开源项目obexftp到android平台下实现蓝牙ftp的功能
- Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签
- Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(三)
- Android平台中实现Zip文件的解压缩功能
- Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(三)
- Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(二)
- android分页查询功能工具类的实现
- Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签
- android分页查询功能工具类的实现
- Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(一)
- Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(三)
- Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签
- android分页查询功能工具类的实现
- Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签
- Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(二)
- Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(三)
- Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签
- android 分享功能实现 即通过其他activity分享