3

だから、私はパンドラのメニューのようなものを模倣しようとしています:

パンドラのメニュー機能

どちらの方法でも、右上隅にあるメニューボタンまたはアイコンを押すことを選択できる場合は、同じドロップダウンメニューリストが表示されます。「オーバーフロー」メニューを作成しようとしましたが、古いデバイスでは、メニューがまだ下部に表示されていることがわかりました(これは望ましくありません)。だから私はを作成しSpinnerて使用しました:

getSupportActionBar().setNavigationMode(getSupportActionBar().NAVIGATION_MODE_LIST);

このアプローチの問題は、アイコンではなくアイテムの名前が表示され(問題のないアイコンを提供する必要があると思います)、スピナーが中央に向かって表示されることです(必要に応じて、右への道)。

まとめると、Pandoraのメニューに似た、の右端にアイコンを表示しActionBar、アイコンまたはメニューボタンの両方を押すと開くメニューを作成する方法はありますか?アドバイス、ヒント、またはヘルプをいただければ幸いです。

4

2 に答える 2

1

ポップアップメニューを作成して、ユーザーがハードウェアボタンのアイコンをクリックしたときに表示することを理解した場合。

さて、ここにポップアップメニューの非常に良い説明があります、そしてあなたがいくつかのデバイスキーを手に入れたいならこれを試してください:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
    case KeyEvent.KEYCODE_DPAD_CENTER:
        Toast.makeText(this, "The Center key was pressed",
                Toast.LENGTH_SHORT).show();
        return true;

    case KeyEvent.KEYCODE_DPAD_RIGHT:
        Toast.makeText(this, "The Right key was pressed",
                Toast.LENGTH_SHORT).show();
        return true;

    case KeyEvent.KEYCODE_DPAD_LEFT:
        Toast.makeText(this, "The Left key was pressed", Toast.LENGTH_SHORT)
                .show();
        return true;

    case KeyEvent.KEYCODE_BACK:
        Toast.makeText(this, "The Back key was pressed", Toast.LENGTH_SHORT)
                .show();

        //---this event has been handled---
        return true;
    }

    //---this event has not been handled---
    return false;
}

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

于 2012-12-31T23:34:55.750 に答える
1

いくつかの実験で、私は何とか達成したいことの一部を得ることができました。これが最善のアプローチかどうかはわかりませんが、うまくいきました。

スピナーが画面の右端に表示されないのは、そのスペースがメニュー項目用に予約されているためであることがわかりました。私がメニュー項目を使用しなかった元々の理由は、古いデバイスではメニューボタンを押すと、画面の下部に項目が表示されるためです(私が望んでいたものではありません)。しかし、私は回避策を見つけました。

私は最初にXMLでメニューを作成しました。

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
        android:id="@+id/spinner_menu_item"
        android:showAsAction="always" 
        android:actionLayout="@layout/spinner" />
    </menu>

および"@layout/spinner"

    <?xml version="1.0" encoding="utf-8"?>
    <com.actionbarsherlock.internal.widget.IcsSpinner xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinner_menu"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"  
    />

次に、onCreateOptionsMenuで:

    getSupportMenuInflater().inflate(R.menu.basic_menu, menu);
    MenuItem item = menu.findItem(R.id.spinner_menu_item);
    spinnerMenu = (IcsSpinner)item.getActionView();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyActivity.this, android.R.layout.simple_dropdown_item_1line, menuItems);
    spinnerMenu.setAdapter(adapter);
    spinnerMenu.setOnItemSelectedListener(new IcsAdapterView.OnItemSelectedListener() {}

そして最後に、次のようにメニューボタンをオーバーライドしました。

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    if (keyCode == KeyEvent.KEYCODE_MENU){
        spinnerMenu.performClick();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

これが行わない唯一のことは、単語ではなくアイコンを表示することです。しかし、途中です!これが同様の問題に直面している人の助けになることを願っています。

于 2012-12-31T23:41:06.660 に答える