0

この種のリストメニューを作成しようとしていますが、成功していません:

http://i.stack.imgur.com/farTG.jpg

Android メニュー ボタンを使用するか、「開く」または「閉じる」テキストの矢印を押したいと思います。そのメニューにはオプションのリストが表示されます。

  • [アイコン] + 開閉
  • [アイコン] + 写真を撮る
  • [アイコン] + ギャラリーから画像をインポート
  • [アイコン] + 送信済みの写真を削除

しかし、私はこの種の結果、ブロックオプションとしてのメニューを得ました:http://i.stack.imgur.com/WZyOz.jpg

私はAndroid開発者のウェブサイトからこのコードを使用しています:

XML ファイル (/menu/gallerie_menu.xml) :

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/open_or_close"
          android:icon="@drawable/ic_open"
          android:title="@string/open"
          android:showAsAction="ifRoom"/>
    <item android:id="@+id/take_pic"
          android:icon="@drawable/ic_camera"
          android:title="@string/take_picture" />
    <item android:id="@+id/import_pic"
          android:icon="@drawable/ic_import"
          android:title="@string/import_picture" />
    <item android:id="@+id/delete"
          android:icon="@drawable/ic_delete"
          android:title="@string/delete_picture" />
</menu>

Java コード:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.gallerie_menu, menu);
    return true;
}

誰かが私に助言したり、私に何かを提案したりできますか?

4

1 に答える 1

1

私が提案できる唯一のオプションは、特に簡単なものではありません。

アクティビティ内で PopupWindow 変数を宣言する場合:

  private PopupWindow myMenu;

次に、そのアクティビティ セットアップの OnCreate で、メニュー ウィンドウがレイアウト xml ファイルを拡張します。これは、メニューの外観と、必要に応じてイベント ハンドラーを追加する方法です。

  View v = getLayoutInflater().inflate(R.layout.test_menu, null, false);
  Button b = (Button)v.findViewById(R.id.myFirstMenuOption);
b.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        //do something....              
    }           
});//repeat for rest off menu buttons.
    myMenu = new PopupWindow(v, 0, 0, false);
    myMenu.setWidth(LayoutParams.MATCH_PARENT);
    myMenu.setHeight(LayoutParams.WRAP_CONTENT);

次に、アクティビティの onKeyDown メソッドをオーバーライドして、ボタンの押下に応答してメニューを表示します。

  @Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_MENU) 
    {
        if (myMenu.isShowing()) 
        {
            myMenu.dismiss();
        } 
        else 
        {
            ScrollView sv = (ScrollView)findViewById(R.id.mainLayout);
            myMenu.showAtLocation(sv, android.view.Gravity.BOTTOM | android.view.Gravity.LEFT, 0, 0);
        }
        return true; //swallow the event
    }
    return super.onKeyDown(keyCode, event);
}

ここでの ScrollView は、アクティビティのレイアウト xml の最上位のビューです。

ここから先は、再利用可能な独自の PopupWindow クラスをコーディングするなど、さまざまなオプションがありますが、このオプションを使用することにした場合は、そのままにしておきます。

これがお役に立てば幸いです。

于 2013-08-14T16:37:46.003 に答える