滑动选项卡与滚动选项卡android

时间:2014-08-10 13:24:53

标签: android android-fragments android-tabhost

我需要在我的应用上使用标签, 我的fragmentActivity可能需要4到7个标签。 我听说滑动标签最适合显示3个或更少标签。我已在其他应用中使用它们,但标签数量为3。我不知道它是否真实,但它们在该应用程序上的表现非常完美。 我需要制作类似Google Play商店应用的内容,因为您可以看到有很多标签,这些标签是什么?

我不需要在这些标签之间进行任何通信。

当我有4到7个标签时,最好使用哪个标签? 我需要在2.3 +

等旧设备上运行该应用程序

谢谢你

2 个答案:

答案 0 :(得分:1)

Google Play商店应用使用滚动标签。这是一个例子:

<强> MainActivity.java

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MainActivity extends ActionBarActivity {
    // used ActionBarActivity from v7 support library, 
    // for backward compatibility 

    private ViewPager viewPager;
    private MyPagerAdapter adapter;

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

        viewPager = (ViewPager) findViewById(R.id.viewPager);
        adapter = new MyPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(adapter);
    }

    private static class MyPagerAdapter extends FragmentPagerAdapter {
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int arg0) {
            // each page corresponds to a new fragment
            // I'll return the same fragment for now
            return new MyFragment();
        }

        @Override
        public int getCount() {
            // return no of pages
            return 5;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            // return the page title
            return "Tab " + position;
        }
    }

    public static class MyFragment extends Fragment {
        public MyFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            return rootView;
        }
    }
}

<强> activity_main.xml中

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:ignore="MergeRootFrame" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:background="#33b5e5"
            android:paddingBottom="4dp"
            android:paddingTop="4dp"
            android:textColor="#fff" />
    </android.support.v4.view.ViewPager>

</FrameLayout>

fragment_main.xml 只是hello world片段。您需要自定义PagerTitleStrip以使其看起来像标签。为此,我真的很喜欢这个library

希望这会有所帮助:)

答案 1 :(得分:0)

最好在你的情况下使用滚动标签。

使用来自support.v4.app lib的片段类,这将使您能够使用早于API级别11的设备滚动选项卡。

要使用支持lib,请将其包含在builf.gradle文件中的依赖项中。

还使用FragmentStatePagerAdapter而不是FragmentPagerAdapter扩展适配器,以在实例被销毁之前存储该实例。

以下是一个示例代码段

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends FragmentActivity {

ViewPager pager = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    pager = (ViewPager) findViewById(R.id.pager);
    android.support.v4.app.FragmentManager manager = getSupportFragmentManager();
    pager.setAdapter(new MyAdapter(manager));

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

public class MyAdapter extends FragmentStatePagerAdapter{

    public MyAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        Fragment frag = null;
        if(i==0){
            frag = new FragmentA();
        }
        if(i==1){
            frag = new FragmentB();
        }
        if(i==2){
            frag = new FragmentC();
        }
        return frag;
    }

    @Override
    public int getCount() {
        return 3;
    }
    public CharSequence getPageTitle(int i){
        String title = new String();
        if(i==0){
           title = "FRAG1";
        }
        if(i==1){
            title = "FRAG2";
        }
        if(i==2){
            title = "FRAG3";
        }
        return title;
    }
}

}