右にスワイプするとlistViewが表示されるビューが欲しいのですが。新しいGooglePlayストアに実装されているものと非常によく似ています(下のサンプル画像)。 ViewPagerだと思いますが、勝てずに複製してみました。 'listView Page' width属性が特定のdpに設定されているだけかもしれないと思っていましたが、それは機能しません。私も変更しようとしました pakerfeldtのviewFlow そしてGoogleがこれをどのように行うのか理解できません
私は正しい方向に進んでいますか?誰かがこれを複製する方法を考えているなら、私はそれを大いに感謝します。これは、タブレットでナビゲーションビューを表示するための人気のある新しい方法になるかもしれないと思います。コードが最も役に立ちます。ありがとうございました!!
右にスワイプ:
完成したスワイプ。レイアウトにはリストと2番目のフラグメントの一部(正確に表示されているとおり)リストフラグメントが画面全体に表示されません。
ユーザーが左にスワイプすると、メインページのみが表示され、ユーザーがもう一度左にスワイプすると、viewPagerは次のページに進みます。
更新が遅れてすみません。私は これはGethubのwalkingiceから ほとんど変更せずに実装しました。 GestureDetectorの条件ステートメントを使用して、ViewPageridが「0」の場合にのみビューにスワイプします。 ActionBarにトグルも追加しました
次のコードは、目的の効果を実現します。
PageAdapter
で:
@Override
public float getPageWidth(int position) {
if (position == 0) {
return(0.5f);
} else {
return (1.0f);
}
最後にもう一度質問を読んでください...サイズのデバイスごとに特定のレイアウトも設定してください。スクリーンショットでは、これをタブレットで実行しようとしているように見えます。電話でも同じ結果が得られますか?
レイアウトの設定
レイアウトがこれと類似していて、ViewPagerがあることを確認してください。
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@color/body_background">
<include layout="@layout/pagerbar" />
<include layout="@layout/colorstrip" />
<Android.support.v4.view.ViewPager
Android:id="@+id/example_pager"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="1" />
</LinearLayout>
アクティビティの設定
「FragmentActivity」でPagerAdapterを設定し、「OnPageChangeListener」を実装していることを確認してください。次に、onCreateでPagerAdapterを適切に設定します。
public class Activity extends FragmentActivity
implements ViewPager.OnPageChangeListener {
...
public void onCreate(Bundle savedInstanceState) {
PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());
pager = (ViewPager) findViewById(R.id.example_pager);
pager.setAdapter(adapter);
pager.setOnPageChangeListener(this);
pager.setCurrentItem(MyFragment.PAGE_LEFT);
...
}
/* setup your PagerAdapter which extends FragmentPagerAdapter */
static class PagerAdapter extends FragmentPagerAdapter {
public static final int NUM_PAGES = 2;
private MyFragment[] mFragments = new MyFragment[NUM_PAGES];
public PagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public int getCount() {
return NUM_PAGES;
}
@Override
public Fragment getItem(int position) {
if (mFragments[position] == null) {
/* this calls the newInstance from when you setup the ListFragment */
mFragments[position] = MyFragment.newInstance(position);
}
return mFragments[position];
}
}
...
フラグメントの設定
実際のListFragment(listViews)を設定すると、次のような引数を使用して複数のインスタンスを作成できます。
public static final int PAGE_LEFT = 0;
public static final int PAGE_RIGHT = 1;
static MyFragment newInstance(int num) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putInt("num", num);
fragment.setArguments(args);
return fragment;
}
ListViewsをリロードすると(これを実装することにした場合でも)、次のような引数を使用して、どのフラグメントインスタンスを使用しているかを把握できます。
mNum = getArguments() != null ? getArguments().getInt("num") : 1;
コードをステップスルーすると、各インスタンスがステップスルーするため、上記のコードはonCreateでのみ必要であり、リロードメソッドは次のようになります。このような:
private void reloadFromArguments() {
/* mNum is a variable which was created for each instance in the onCreate */
switch (mNum) {
case PAGE_LEFT:
/* maybe a query here would fit your needs? */
break;
case PAGE_RIGHT:
/* maybe a query here would fit your needs? */
break;
}
}
ゼロから始めるのではなく、最初から構築できる例で役立つ可能性のあるいくつかのソース:
遊び場からのより多くの説明と例。 http://blog.peterkuterna.net/2011/09/viewpager-meets-swipey-tabs.html これは参照先です: http://code.google.com/p/Android-playground /
より多くの情報といくつかの良いつながり。 http://www.pushing-pixels.org/2012/03/16/sensitive-mobile-design-on-Android-from-view-pager-to-action-bar-tabs.html
より具体的な質問の投稿があり、私はいつでも私の回答を編集(更新)してあなたの質問に対処することができます。幸運を! :)
ViewPager は 互換性のあるパッケージ の一部です
Fragments を使用している場合は、ViewPager
を使用してそれらの間をスワイプできます。
ここに例がありますFragments
とViewPager
を組み合わせる
特定のケースでは、ListFragment
を作成してから、ViewPager
を実装する必要があります。
少しトリックを加えるだけで、ViewPager内のScrollView-Behaviorを使用して動作を実現できます。一番左のフラグメントの領域のみを制限したい場合は、ScrollViewのスクロール制限を制限できます。
あなたの場合:ViewPagerのonPageChangeListenerで、次のようなことを行います。
@Override
public void onPageScrollStateChanged(int arg0) {
restrictLeftScroll();
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
restrictLeftScroll();
}
@Override
public void onPageSelected(int arg0) {
}
private void restrictLeftScroll() {
if (display != null) {
/* get display size */
Point size = new Point();
display.getSize(size);
/* get desired Width of left fragment */
int fragmentWidth = getResources().getDimensionPixelSize(R.dimen.category_fragment_width);
if (mViewPager.getScrollX() < size.x - fragmentWidth) {
mViewPager.scrollTo(size.x - fragmentWidth, mViewPager.getScrollY());
}
}
}
このコードは問題なく機能しました。 ;)
標準の横に「サイドナビゲーション」を実装しようとしていると思います ViewPager 。
私はこのパターンに関する2つの異なる記事を読みました:
パターン自体の最初のもの:
Android Uiパターンの新しいUIパターン-サイドナビゲーション
誰がそれを構築するかについてのより詳細な方法に関する2番目:
Cyril Mottierフライインアプリメニュー #1#2#
この2番目の記事は、Android UiPatternブログで参照されています。