QuickAction

TwitterクライアントのUIが好きだったので、早速QuickActionを使ってみた。
関連クラスのソースコードがあれば、以下のように短いコードですぐに使うことができる。

  • QuickActionTest.java
public class QuickActionTest extends Activity {
    QuickAction quickAction;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.main);
        LinearLayout anchor = (LinearLayout)this.findViewById(R.id.anchor);
        anchor.setBackgroundColor(Color.MAGENTA);
        
        Resources res = this.getResources();

        this.quickAction = new QuickAction(anchor);
        this.quickAction.addActionItem(new ActionItem(res.getDrawable(R.drawable.users), "Action"));
        anchor.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                quickAction.show();
            }
        });
    }
}
  • mail.xml(layout)



  • 実行結果


レイアウトでLinearLayout(anchor)を真ん中に配置してこれをアンカーとしてQuickActionを生成している。QuickActionには複数のActionItemを追加することが出来るが、このActionItem内部のアイコンとタイトルがQuickAction上のビューに描画される。
ActionItemを複数追加することで描画が画面の幅を超えると横にスクロールすることが出来るようになるが、この機能により画面に収まらない選択肢を一度に表示できると共に、スワイプ操作で必要なアクションを選ぶことができる訳だ。

使ってみてすぐに解るのは、QuickActionは動的に生成/廃棄することを前提にしていることだ。上のサンプルコードを見てすぐに問題に気がついた方もいるだろうが、QuickActionクラスのインスタンスをフィールドとして生成したままにしておくと、QuickAction#showメソッドを呼ぶ度に困ったことになる。

  • ActionItemが重複したQuickAction

何故こうなるかは解説しないが、QuickActionのソースコードを見ればすぐに理解できるはずだ。

QuickActionはこのスクリーンショットのような「ボタン-トラック」なスタイルの他にAndroid 2.xのギャラリ等で採用されている「リスト-ポップアップ」なスタイルで表示することもできるので、好みによって使い分けるのが良いだろう。

  • 「リスト-ポップアップ」スタイルなQuickAction


QuickActionのソースコード、アイコン等は以下の方々を参考にしている。
How to Create QuickAction Dialog in Android - Lorenz's Blog
Android Quick Action の Android ライブラリプロジェクトを作ってみた - Y.A.M の 雑記帳