在Android 2.2+;ViewPager和片段

在Android 2.2+;ViewPager和片段,android,android-viewpager,swipe,android-2.2-froyo,fragment-tab-host,Android,Android Viewpager,Swipe,Android 2.2 Froyo,Fragment Tab Host,对于像我这样的人来说,这是一个简短的教程,他们在找到实现TabHost和ViewPager的方法时遇到了一些困难,包括用手指滑动页面和单击tab键来更改页面。显示的解决方案与Android版本2.2+兼容 它包括选项卡初始化、与选项卡连接的ViewPager和页面滚动管理 它的主要特点是针对早期版本的Android(Android2.2(Froyo),API版本8)进行了优化,并针对不同的目的进行了简单的实现。本教程包括4个类和2个布局。它已经在安卓手机2.2上测试过了,你可以复制粘贴试用 Ma

对于像我这样的人来说,这是一个简短的教程,他们在找到实现TabHost和ViewPager的方法时遇到了一些困难,包括用手指滑动页面和单击tab键来更改页面。显示的解决方案与Android版本2.2+兼容

它包括选项卡初始化、与选项卡连接的ViewPager和页面滚动管理


它的主要特点是针对早期版本的Android(Android2.2(Froyo),API版本8)进行了优化,并针对不同的目的进行了简单的实现。

本教程包括4个类和2个布局。它已经在安卓手机2.2上测试过了,你可以复制粘贴试用

MainActivity.java(主要活动):

MySampleFragment.java(单个片段-用于演示):

活动\u main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
            <TabWidget
                android:id="@android:id/tabs"
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0" />
            <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/viewpager"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom" />
        </LinearLayout>
    </TabHost>
</RelativeLayout>

示例\u fragment.xml(您可以将片段布局放在这里):



您可以在此处下载该项目:最好将其转换为问答格式(应该不会太难)。堆栈溢出不适合博客文章或教程内容。emulator上的选项卡切换不稳定。选项卡内容可明显调整大小。有人知道为什么吗?非常感谢你的回答。您对@dimen/activity\u vertical\u margin和@dimen/activity\u horizontal\u margin应用了哪些值?此外,您提供的activity\u main.xml应该应用哪些更改,以使选项卡栏(TabWidget)位于活动的底部,而不是顶部?@Bliss您知道怎么做吗?
package samples.tabhost.andreaoid.net;

import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyPageAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;

    public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }
}
package samples.tabhost.andreaoid.net;

import android.content.Context;
import android.view.View;
import android.widget.TabHost.TabContentFactory;

public class MyTabFactory implements TabContentFactory {

    private final Context mContext;

    public MyTabFactory(Context context) {
        mContext = context;
    }

    public View createTabContent(String tag) {
        View v = new View(mContext);
        v.setMinimumWidth(0);
        v.setMinimumHeight(0);
        return v;
    }
}
package samples.tabhost.andreaoid.net;

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 MySampleFragment extends Fragment {

    private static View mView;

    public static final MySampleFragment newInstance(String sampleText) {
        MySampleFragment f = new MySampleFragment();

        Bundle b = new Bundle();
        b.putString("bString", sampleText);
        f.setArguments(b);

        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        mView = inflater.inflate(R.layout.sample_fragment, container, false);
        String sampleText = getArguments().getString("bString");

        TextView txtSampleText = (TextView) mView.findViewById(R.id.txtViewSample);
        txtSampleText.setText(sampleText);

        return mView;
    }
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
            <TabWidget
                android:id="@android:id/tabs"
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0" />
            <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/viewpager"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom" />
        </LinearLayout>
    </TabHost>
</RelativeLayout>
<?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/txtViewSample"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="" />

</RelativeLayout>