6

Engadget アプリと同様に、アプリのフッターにメニューを実装しようとしています。私が理解しているように、標準の TabLayout をこのように機能させることは簡単ではありません (可能な場合)。

このインターフェイス パラダイムを使用しているアプリがかなりあるので、それを行う賢い方法があると思います。現在、すべてのレイアウトの最後にインクルード行を追加してレイアウトを定義しています。レンダリングに関する限り、これは正常に機能しますが、onClickListeners を各アクティビティに追加する必要があります。XML で clickListener を定義できますか?

私の質問を要約すると: 複数のアクティビティにまたがる共有フッター ナビゲーションを実装する最良の方法は何ですか?

4

3 に答える 3

6

Activity を拡張する共通の基本クラスからすべてのアクティビティを派生させ、そこにメニューを構築するためのメソッドを配置できます。RelativeLayout をメイン コンテナーとして使用し、水平方向の LinearLayout を下部 (layout_alignParentBottom="true") に貼り付け、その上にメインの「コンテンツ」コンテナー (特定のアクティビティに必要なレイアウトの種類) を配置します。メニューに配置するもの (ImageButton など) に android:weight を使用してから、メニューのコンテナーに android:weightSum を使用すると、均等に配置されます。したがって、android:weight="1" の ImageButton が 4 つあり、それらを含む LinearLayout に android:weightSum="4" がある場合は、問題ありません。

したがって、TabContentActivity は Activity を拡張でき、特定のアクティビティはすべて TabContentActivity を拡張します。TabContentActivity には、super.onCreate を呼び出してから、メニューを構築するためのプライベート メソッドを呼び出す onCreate があります。次に、派生クラスが独自の onCreate で super.onCreate を呼び出すと、「タブ」が構築されます。各タブを表す TabContentActivity の列挙型を、その列挙型のローカル変数で使用して、どのタブを強調表示するかを指定できます。

そのようにしないでくださいという人々の言うことを聞かないでください。それがあなたが望むUIであるなら、あなたが働いている環境に制約されないでください.「Androidでそれを行う正しい方法」ではないという回答があるのと同じように、現在あなたにも2つの賛成票があります.

于 2010-05-28T14:27:10.420 に答える
0

このアイデアが実行可能かどうかわからない、

フッターにTabLayout1を設定しますが、コンテンツではなくタブのみが表示されるように設定します(フッターの下の非表示スペースに配置されます)。
次に、画面の残りの部分に2番目のビューがあり、そこでビューを切り替えることができます。2番目のレイアウト(上部)をTabLayout2として設定し、タブをアクティビティにバインドすると、このビューをアクティビティ間で共有できます。また、タブが表示されないようにTabLayout2を上部に設定して、コンテンツ領域のみが表示されるようにする必要があることに注意してください。いくつかのパディングで解決できると思います。

于 2010-05-28T13:06:19.353 に答える
0

これがロングショットであり、それが機能するかどうかを確認するために試したことはありません:

  • onClickフッターの要素のメソッドを含む特別なクラスを作成します。あなたが持っているimportすべてのこのクラス。Activity
  • android:onClickそのクラスのメソッドを指す値を含む XML ファイルで使用します。

さて、このクラスを毎回インスタンス化する必要があるかどうか、Activityまたはそのメソッドを静的として使用できるかどうかはわかりませんが、このようなものが機能するはずであり、すべてのアクティビティにリスナーを追加するよりも優れています.


私の意見では (これは私の意見にすぎないことを強調しておきます)、あなたが言うこのインターフェース パラダイムは、iPhone をコピーする試みとしては不十分です。このパラダイムは、主にボタンが 1 つしかないため、iPhone で非常に人気があります。私は Engadget アプリがそれを行うのが嫌いです (これも iPhone アプリからコピーされたものです)。これは画面の領域を浪費します。

要するに、私のアドバイス: MENUボタンを使用してください。


最後の注意:をいじったことはありませんが、各タブにTabLayout個別Activityに が必要な場合は、99.9% できないと確信しています (アクティビティ全体を任意の種類のViewまたはに埋め込むことはできませんViewGroup)。活動ではなく、TabLayout子供たちを収容するだけです。Layoutまた、 を使用すると、[戻るTabLayout] ボタンにさよならを言うことができます (iPhone から UI をコピーするためにさらに別のボタンを無駄にするつもりですか?) -- オーバーライドする予定がない限り、その場合は、にさよならを言うことができますあなたのユーザー。

于 2010-05-28T13:00:03.563 に答える