利用FragmentTabHost和ViewPager来实现可滑动切换的页面
1. FragmentTabHost的基本使用方法,请参照官方教程和案例
http://developer.android.com/intl/ja/reference/android/support/v4/app/FragmentTabHost.html
2. 首先,我们定义页面的布局文件
activity_bottom.xml
<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0" />
<android.support.v4.view.ViewPager
android:id="@+id/itemViewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" />
</LinearLayout>
</android.support.v4.app.FragmentTabHost>把ViewPager和TabWidget放在FragmentTabHost里面
ViewPager用来显示页面内容,TabWidget用来显示按钮。如何把ViewPager和TabWidget调换位置的化,按钮将出现在页面的上方。
FragmentLayout用来识别当前选中的Tab。
3. 接下来在drawable文件夹下定义每个按钮的selector,用于切换页面或者点击按钮时,使按钮图片改变。
tab1_button.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/tab1_selected" android:state_enabled="false"/>
<item android:drawable="@drawable/tab1_normal" android:state_enabled="true"/>
</selector>tab2, tab3, tab4....都采用同样的定义。
4. 定义各页面的Fragment的布局。
fragment1.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TextView>
</FrameLayout>fragment2,3,4...采用类似定义。
5. 各Tab的表示内容
tab1.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/description"
android:scaleType="centerInside"
android:src="@drawable/tab1_button" />tab2,3,4...采用类似定义
6.接下来实装Activity
继承与FragmentActivity
MainActivity
package org.kaka.booker.activity;
import java.util.ArrayList;
import java.util.List;
import org.kaka.booker.R;
import org.kaka.booker.activity.fragment.Fragment1;
import org.kaka.booker.activity.fragment.Fragment2;
import org.kaka.booker.activity.fragment.Fragment3;
import org.kaka.booker.activity.fragment.Fragment4;
import org.kaka.booker.adapter.FragmentViewPagerAdapter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TabHost.OnTabChangeListener;
public class MainActivity extends FragmentActivity {
private FragmentTabHost tabHost;
private String currentTabId;
private View currentView;
private ViewPager viewPager;
private List<Fragment> fragmentList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bottom);
initTabHost();
initViewPager();
}
private void initTabHost() {
fragmentList = new ArrayList<Fragment>();
tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
tabHost.setup(this, getSupportFragmentManager(),
android.R.id.tabcontent);
LayoutInflater inflate = LayoutInflater.from(this);
View tab1 = inflate.inflate(R.layout.tab1, null);
View tab2 = inflate.inflate(R.layout.tab2, null);
View tab3 = inflate.inflate(R.layout.tab2, null);
View tab4 = inflate.inflate(R.layout.tab2, null);
tab1.setEnabled(false);
tab2.setEnabled(true);
tab3.setEnabled(true);
tab4.setEnabled(true);
fragmentList.add(new Fragment1());
fragmentList.add(new Fragment2());
fragmentList.add(new Fragment3());
fragmentList.add(new Fragment4());
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator(tab1),
Fragment1.class, null);
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator(tab2),
Fragment2.class, null);
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator(tab3),
Fragment3.class, null);
tabHost.addTab(tabHost.newTabSpec("tab4").setIndicator(tab4),
Fragment4.class, null);
currentTabId = "tab1";
currentView = tab1;
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
if (!currentTabId.equals(tabId)) {
currentView.setEnabled(true);
View preView = tabHost.getCurrentTabView();
currentView = preView;
preView.setEnabled(false);
currentTabId = tabId;
}
viewPager.setCurrentItem(tabHost.getCurrentTab());
}
});
}
private void initViewPager() {
viewPager = (ViewPager) findViewById(R.id.itemViewPager);
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
tabHost.setCurrentTab(arg0);
}
});
viewPager.setAdapter(new FragmentViewPagerAdapter(
getSupportFragmentManager(), fragmentList));
}
}7. 定义ViewPager的适配器
FragmentViewPagerAdapter
package org.kaka.booker.adapter;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class FragmentViewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;
public FragmentViewPagerAdapter(FragmentManager fm,
List<Fragment> fragmentList) {
super(fm);
this.fragmentList = fragmentList;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return fragmentList.get(arg0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return fragmentList.size();
}
}8. 最后定义每一个页面的Fragment
Fragment1
package org.kaka.booker.activity.fragment;
import org.kaka.booker.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflator, ViewGroup container,
Bundle bundle) {
View view = inflator.inflate(R.layout.fragment_empty, container, false);
TextView text = (TextView) view.findViewById(R.id.text1);
text.setText("hello");
return view;
}
} 相关推荐
xilove0 2020-05-15
ChainDestiny 2015-04-14
gzweihuo 2012-04-10
mpqitmp 2014-08-15
一航jason 2019-06-26
yuyu00 2019-06-26
蓝蓝的天 2019-06-21
蓝蓝的天 2019-06-21
xzw 2019-06-21
Miryou 2019-06-20
Palingenesis 2019-06-20
importSUC 2017-09-13
老汪的技术人生 2017-08-17
zhuch 2017-04-30
zhouanzhuojinjie 2016-09-21
ziyexiaoxiao 2016-09-21
wyqzys 2015-04-14
开发中的点点滴滴 2014-11-14
androidstudyroom 2014-06-27