2011-11-30 10 views
4

Android用Googleマップの公式アプリの新バージョン6で、どのコンポーネントがメニューに使用されているか知っていますか?アイコン付きのAndroidポップアップメニュー

私は公式のdevのページに何かを見つけることができませんでした、と同様のメニューを構築しようとしている(注:私はおそらく1.6までの下位互換性を維持し、ジンジャーブレッドのAPIをターゲットにしています)

こここのメニューの私が見つけた唯一の写真です(これはICSにありますが、同様のものがジンジャーブレッドに表示されています)。 (Gizmodoサイトから)ここでは、左のスクリーンショットを見てください:

from Gizmodo http://media.gizmodo.co.uk/wp-content/uploads/2011/11/GoogleMaps6.0.jpg

組み込みのコンポーネントはありません場合は、どのようなアプローチは、あなたがものを構築するために従うでしょうか?

最悪の場合、Android 2.xにこのようなコンポーネントが存在しない場合は、Googleマップアプリケーション自体がオープンソースであるかどうか、そのソースを見つける場所はわかりますか?

答えて

2

次のリンクをご覧ください。クイックアクションダイアログの良い例があります。あなたが望むもののコードを変更することができます。

http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/

+0

ありがとう、面白いです。正確には私が探しているものではありません(私はアイコンがたくさんあるので、スクロールバーのある垂直リストを好むでしょう)が、私はそれを変更できると確信しています。見ています。 – Guillaume

+0

実際には縦型レイアウトの例がありますので、ちょうど私のために働くかもしれません;) – Guillaume

+0

私はこのことからインスピレーションを受けて、それは完全に動作します。また、非常に柔軟でカスタマイズ可能ですが、私はそれが大好きです、リンクのおかげで再び。 – Guillaume

4

PopupMenuおそらくあなたが探しているものです。しかし、それはAndroid 3.0以降(APIレベル11で導入された)でのみ動作し、私が知る限り互換性ライブラリには存在しません。

+0

Android2.xxxに表示されるメニューのバージョンは、完全にカスタムメニューですか?彼らがどのようにそれをして、Googleからのコードの一部を盗み出すかを見つけるチャンス? ;) – Guillaume

+1

ちょうどチェックされて、それは間違いなくアイスクリームサンドイッチソース*(期待どおり)*です。つまり、ダウンロードして、このコンポーネントをバックポートできるかどうかを確認できます。 'frameworks/base/core/java/android/widget/PopupMenu.java'にあります。 –

+0

@alextscありがとう、私はそれを試してみるつもりです、私はすでにブラウジングのためのICSソースを準備しています:) – Guillaume

0

これは、よりカスタマイズされたアクションバーのように見えます。おそらくActionProviderです。 ActionBarはAPIレベル11以降で利用可能ですが、ActionBarSherlockをチェックアウトしてください。

11

これはAPI4(テストされていないYMMV)まで機能するはずです。たとえば:あなたはActionBarSherlockを使用している場合

An example

、あなたはIcsListPopupWindowクラスを使用することができます。 onCreateでいくつかのプロパティを設定します。 ArrayAdapterもサブクラス化する必要があります。 onCreate()内

:あなたのフラグメント/アクティビティ内

mPopupMenu = new IcsListPopupWindow(getContext()); 
mAdapter = new PopupMenuAdapter(this, android.R.layout.simple_list_item_1, yourArrayOfPopupMenuItems); 
mPopupMenu.setAdapter(mAdapter); 
mPopupMenu.setModal(true); 
mPopupMenu.setOnItemClickListener(this); 
mPopupMenu.setOnDismissListener(this); // only if you need it 

内部クラス:あなたが必要なときはいつでも

private class PopupMenuAdapter extends ArrayAdapter<PopupMenuItem> { 

    Context context; 
    int layoutResourceId; 
    PopupMenuItem data[] = null; 

    public PopupMenuAdapter(Context context, int layoutResourceId, PopupMenuItem[] data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 

     // initialize a view first 
     if (view == null) { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      view = inflater.inflate(layoutResourceId, parent, false); 
     } 

     PopupMenuItem pItem = data[position]; 
     TextView text = (TextView)view.findViewById(android.R.id.text1); 
     text.setText(pItem.textResId); 
     text.setCompoundDrawablesWithIntrinsicBounds(pItem.iconResId, 0, 0, 0); 

     return view; 
    } 
} 

// ... PopupMenuItem is just a container 

private static class PopupMenuItem { 
    public int iconResId; 
    public int textResId; 

    public PopupMenuItem(int iconResId, int textResId) { 
     this.iconResId = iconResId; 
     this.textResId = textResId; 
    } 
} 

(例えばAA View.OnClickListenerのように)、それを表示します

mPopupMenu.setContentWidth(getActivity().getWindowManager().getDefaultDisplay().getWidth()/2); 
PopupAdapter.notifyDataSetChanged(); // if you change anything 
mPopupMenu.setAnchorView(yourAnchorView); 
mPopupMenu.show(); 

あなたOnItemClickListenerで

mPopupMenu.dismiss()を呼び出すようにしてください!

希望すると便利です。そしてABSのジェイクウォートンに感謝します!

+0

お世話になりました。あなたのコードでは、mPopupMenuはmPopupWindowと同じですか?私の主な質問は、AnchorViewをアクションバーのMenuItemに設定する方法です。上のコードでは「オーバーフロー」は何ですか? – elprl

+0

ちょうど私の答えを更新しました...オーバーフローは、あなたがメニューを添付したいビューでした –

+1

PopupMenuItemはもはや利用できません.. – Tobrun

関連する問題