3

私は非常に単純なものが欲しいです(とにかくデフォルトであるべきです!):

[logo] [---------------expanded action view--------------] [other actionview]

デフォルトでは、Android はこれを行います。

[logo] [----stupid empty space----][collapsed action view] [other actionview]

いいと思いました。MenuItem を取得して、onCreateOptionsMenu で「expandActionView()」を呼び出しましょう。

いいえ!

Android はこれを行うようになりました。

[back symbol] [logo] [---------------expanded action view--------------] [other actionview]

しかし...その背中はどこから来たのですか?なんでボタンなの?それは何をしているのですか?

  1. ホームアズアップは無効です: getActionBar().setDisplayHomeAsUpEnabled(false);
  2. ホームは無効です: getActionBar().setHomeButtonEnabled(false);
  3. タップすると... AndroidはACTIONVIEWを完全に削除します。は?

これは Android のバグですか?バグが 2 つでも?ドキュメントでこの魔法の動作についての言及を見つけることができず、actionview を削除した部分が非常に間違っているようです :(。「expandActionView()」を呼び出すと、実際に ActionBar 構成が削除され、新しい構成に置き換えられるべきですか?

4

1 に答える 1

2

設計どおりのようですが、デザインが貧弱です。

  1. 「避けられない」ホームボタンは、すべての「展開」が、ユーザーが折りたたまれたビューを押して展開するように要求することによってトリガーされたと想定するようにハードコーディングされているためです (明らかに、プログラムで実行している場合はそうではありません)。バックスタックも使用していないようです。これは奇妙です

  2. 「消えた」ビューは、アクションビューからアイコンを削除したためであり(常に展開されるはずでした)、ホームボタンを押すと展開が解除されました。

回避策:

  1. MenuItem.collapseActionView / .expandActionView は使用しないでください。設計が不適切で、適切に動作せず、ほとんどの Android バージョンでサポートされていません。
  2. その代わり:
    1. カスタム ActionLayout を使用する
      1. 注意: onOptionsItemSelected は壊れています: カスタム actionview のタップを検出しません。
      2. 注意: setOnMenuItemClickListener は壊れています: カスタムアクションビューでのタップを検出しません
    2. onCreateOptionsMenu 内の各 ActionView に onClickListener を追加します。
    3. View.setVisibility( View.GONE ) を使用して項目を折りたたむ
      1. 同じレイアウトに「折りたたまれた」ビューと「展開された」ビューがあります。
      2. 常に、一方を GONE、もう一方を VISIBLE にしてください。

注: 基本的に、これは ActionView の折りたたみ/展開全体を再実装することを意味しますが、次の違いがあります。

  1. 自分でやれば効果あり
  2. Androidのすべてのバージョンで機能します
  3. レイアウトは正しい (ActionBar 拡張 ActionView の Google のレイアウト計算は、「スペースの量」を決定するアルゴリズムが正しくなく、タイトル + アプリ アイコンの実際のサイズを無視するため、わずかにバグがあることが知られています)。
于 2013-05-03T13:21:50.233 に答える