5

アプリの最新バージョンでは、Google はタブ ヘッダーをクリックするのではなく、タブ間をスワイプする非常にクールな方法を実装しています。これがどのように行われるかについて、誰かがより具体的なアイデアを持っているかどうか疑問に思っていました。

ここにいくつかの考えがあります - 自由に批評してください:

私の最初の考えでは、これはTabActivity子アクティビティをホストする標準ではありません。実際、私もそれが習慣だとは思いませんActivityGroup。スワイプするとタブの行がスクロールしますが、アクティブなタブは切り替わりません。

タブのメイン コンテンツをスワイプすると、興味深い動作が見られます。メイン コンテンツ エリアに GestureListener が接続されていると思われます。タブをスワイプすると、隣接するタブの行が表示されます。これは、これが水平方向にスクロール可能なListViewのグループであることを示唆しているようです。これは、水平方向にスクロール可能な HTML div のようなもので、すべてのコンテンツが既に存在しますが、スワイプすると表示されます。ただし、行のレンダリングがどのように処理されるかはよくわかりません(伝統的に、リストを左右ではなく上下にスクロールすると、行が作成されて表示されます)。それで、それもカスタムListView実装ですか?左右にスクロールしないときはListView、高速スクロールやプルダウン時のグロー効果など、通常のスクロールと同じように動作します。

ScrollView端までスワイプしたときのグロー効果によって証明されるように、タブの列はおそらくです。タブの内容の行はそうではありません。

私は、この本当に気の利いた UI を構成するさまざまな部分のメンタル モデルを構築しようとしています。どんな洞察も大歓迎です。

4

6 に答える 6

2

それを完璧に行うための最も価値のある情報源は、IO 2011 アプリケーションからの情報源です。

ScheduleFragment および Workspace クラスを調べます。

ありがとう。

于 2011-07-04T09:26:57.833 に答える
1

これは、ホーム画面と同じ比喩です。複数のページがあり、横方向にスワイプでき、各画面がその役割を果たします。それには「ロック」動作があります (十分にスワイプすると新しいタブにジャンプしますが、十分にスワイプしない場合は既に表示されている画面に戻ります)、画面の下部にある小さなドットの代わりにホーム画面では、現在のページのインジケーターとしてタブを使用します。

あなたが言ったように、タブはスクロールしません。また、スワイプの途中で実際に垂直スクロールすることはできないため、ここで見つけることができるものと同様の簡単な実装です。マルチタッチを使用すると、垂直スクロールを行うことができると思いますが、それは本当に奇妙で、ほとんど不要です。見た目はクールですが、ユーティリティは限られています。は、標準のsListViewである以外に何もする必要はありませんListView。上部にはおそらくカスタムの Button ベースのタブ ウィジェットがあり、スクロールに基づいて Button スタイルが更新され、右側のタブが強調表示されます。そしてそれはそれについてです。

于 2011-06-15T07:14:30.397 に答える
1

空のフレーム内にタブを配置できます。

GestureDetector.SimpleOnGestureDetectorメソッドをオーバーライドして、そのフレームに をアタッチしますonFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

タブを実際に変更する前に、必要なフリングの強さを決定できます。e1との間の累積距離を使用しe2ます。

falseを返すことを忘れないでくださいonFling。そうしないと、タッチ イベントが下のビューに落ちません。

于 2011-07-30T08:54:25.397 に答える
1

Youtube アプリのレイアウトは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...>
    ...
    <TabRow android:id="@id/tabrow" .../>
    <Workspace android:id="@id/workspace" ...>
        <ListView android:id="@id/uploads" ... />
        <ListView android:id="@id/favorites" ... />
        <ListView android:id="@id/playlists" ... />
        <ListView android:id="@id/subscriptions" ... />
    </Workspace>
</LinearLayout>

Google は、Music アプリでも使用される 2 つのウィジェットを導入しています。

  • com.google.android.youtube.ui.TabRow.

    TabRow は Horizo​​ntalScrollView を拡張します

  • com.google.android.youtube.ui.ワークスペース

    ワークスペースは ViewGroup を拡張します

実装については、「適切なツール」を使用して誰でも覗くことができます。しかし、これは大まかなコードを提供し、おそらく間違ったコードを提供します。あまり運がなかったので、試してみました。やる気があり、グーグルスキルを持っている人がそれを作ることができると思います。

他の解決策とより良い解決策: Google がこれらのクラスの lib またはコードをすぐにリリースすることを願っています。この GUI は本当に楽しく使えます。

于 2011-07-30T08:48:27.863 に答える
0

あなたが言及しているのはWorkspace-Patternだと思います。残念ながら、Google はこれを標準化していないため、独自に実装する必要があります。

そのためには、ViewPagerまたはFragmentPagerAdapter (プログラミング例) を使用する必要があります。

于 2012-03-17T00:40:39.407 に答える
0

私はあなたが探しているものの解決策を見つけたと信じています. タブは実際にはアプリのアクション バーにあります。

http://developer.android.com/guide/topics/ui/actionbar.html#Tabs

また、 Android for Programmers - An App-Driven Approach (ISBN 0132121360)の第 14 章では、このアクション バー タブ システムに完全に焦点を当てています。

于 2012-02-26T21:16:00.903 に答える