2

基本的に私が求めているのは、Twitter アプリの Plume のオープニング画面の機能と同じです。小さな画面 (電話) では、前後にスワイプできる 3 つのタブがあります。私はこの正確な設定をしています。空白が多すぎるため、タブレットでは見栄えが悪くなります。Plume では、3 つのタブすべてを画面にロードするだけでした。スワイプする必要はありません。すべてのタブが表示され、それぞれが画面の約 1/3 を占有します。スペースのより良い使用。これどうやってやるの?

これが私のコードです:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_layout);

    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    mViewPager = (ViewPager) findViewById(R.id.viewpager);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setOffscreenPageLimit(3);

    mViewPager
            .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    actionBar.setSelectedNavigationItem(position);

                }
            });

    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
        actionBar.addTab(actionBar.newTab()
                .setText(mSectionsPagerAdapter.getPageTitle(i))
                .setTabListener(this));
    }

    catName = getSharedPreferences("catName", Context.MODE_PRIVATE);
    itemName = getSharedPreferences("itemName", Context.MODE_PRIVATE);

    mViewPager.setCurrentItem(1);

}

public void onTabUnselected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {

}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

}

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    mViewPager.setCurrentItem(tab.getPosition());
}

public void onTabReselected(ActionBar.Tab tab,
        FragmentTransaction fragmentTransaction) {
}

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        Fragment f = null;
        switch (position) {
        case 0: {
            f = new MasterFrag();
            Bundle args = new Bundle();

            f.setArguments(args);
            break;
        }
        case 1: {
            f = new FeaturedFrag();
            Bundle args = new Bundle();

            f.setArguments(args);
            break;
        }

        case 2: {
            f = new TopFrag();
            Bundle args = new Bundle();

            f.setArguments(args);
            break;
        }

        default:
            throw new IllegalArgumentException("not this many fragments: "
                    + position);
        }

        return f;

    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
        case 0:
            return getString(R.string.mastercattab1).toUpperCase(Locale.ENGLISH);
        case 1:
            return getString(R.string.mastercattab2).toUpperCase(Locale.ENGLISH);
        case 2:
            return getString(R.string.mastercattab3).toUpperCase(Locale.ENGLISH);

        }
        return null;
    }
}

これが私の XML フラグメントのレイアウトです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >


            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                android:orientation="horizontal" />

            <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="0dp"
                android:layout_weight="1" />
        </LinearLayout>
    </TabHost>

</LinearLayout>
4

2 に答える 2

3

あなたの最新の回答と、動作する xml レイアウトに加えて、以下のこのコードを使用すると、十分に単純だと思います! :)

編集: したがって、2 つの XML レイアウトがあります。1 つは小画面と中画面用 (最初の投稿の xml) で、もう 1 つはタブレット用で、大と xlarge (実際の回答の xml) です。

理論的には、次のように 2 つを切り替えることができます。

public class YourClassName extends FragmentActivity {

    static boolean isTablet = false;
    static ActionBar actionBar = null;

public void onCreate(Bundle savedInstanceState) {
    actionBar = getActionBar();

    if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE) {     
        setContentView(R.layout.single_pane_fragment_layout);
        isTablet = true;
    } else {
        setContentView(R.layout.viewpager_fragment_layout);
    }
...

次に、フラグメント アクティビティの onTabSelected で以下のコードを呼び出すことができますが、onCreateView の下のフラグメント内で呼び出すこともできます。変数を静的にしたことに注意してください。

例:

if (YourClassName.actionBar != null && YourClassName.actionBar.isShowing() && YourClassName.isTablet) {
    YourClassName.actionBar.removeAllTabs();
}

また、ActionBar.hide() および .removeAllTabs() に関する詳細情報は次のとおりです: http://developer.android.com/reference/android/app/ActionBar.html#hide%28%29

于 2012-12-12T01:02:14.647 に答える
0

例として、Googleのサイトからこのコードを使用しました。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/frags">
    <!-- "Fragment A" -->
  <fragment class="com.example.android.TitlesFragment"
            android:id="@+id/list_frag"
            android:layout_width="@dimen/titles_size"
            android:layout_height="match_parent"/>
    <!-- "Fragment B" -->
  <fragment class="com.example.android.DetailsFragment"
            android:id="@+id/details_frag"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
</LinearLayout>

ViewPager次に、上記の両方のフラグメントを追加する必要がありました。

于 2012-12-10T20:01:22.497 に答える