ユーザーからメニューキーをクリックせずに、プログラムでoptionsMenuを開きたいです。どうすればいいですか?
または、単に Activity.openOptionsMenu() ?を呼び出します
どうやら、onCreateでそれを行うと、アクティビティがまだウィンドウに関連付けられていないため、アプリが中断します。あなたがそうするなら:
@Override
public void onAttachedToWindow() {
openOptionsMenu();
};
...できます。
Support Library
の新しいToolbar
クラスを使用する開発者の場合、次のようになります。
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.showOverflowMenu();
このコード行をonResume()に入れてください。これは役立つはずです!
new Handler().postDelayed(new Runnable() {
public void run() {
openOptionsMenu();
}
}, 1000);
mainActivityと呼ばれるアクティビティ内のOnClickListenerから:
MainActivity.this.openOptionsMenu();
appCompatActivityを使用する場合
getSupportActionBar().openOptionsMenu();
それを行う2つの方法:
Activity.getWindow().openPanel(Window.FEATURE_OPTIONS_PANEL, event);
event
引数は、メニューを開くために使用されるキーを説明するKeyEvent
です。これは、元のキーボードのタイプに基づいてメニューの表示方法を変更できます。
または...ユーザーがボタンを押したことをシミュレートして:
IWindowManager wManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
KeyEvent kd = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SOFT_LEFT);
KeyEvent ku = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SOFT_LEFT);
wManager.injectKeyEvent(kd.isDown(), kd.getKeyCode(), kd.getRepeatCount(), kd.getDownTime(), kd.getEventTime(), true);
ビュー内にいる場合は、次のように記述できます
((Activity)getContext()).openOptionsMenu();
私にとって、onClickでtoolbar.showOverflowMenu()
を宣言することはできません。 openOptionsMenu()
も役に立たなかった。その代わりに、次の方法が私のために働いています、
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
toolbar.showOverflowMenu();
}
}, 500);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setTitleTextColor(0xFFFFFFFF);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
toolbar.showOverflowMenu();
}
}, 100);
長い研究と多くの試みの後、唯一の方法はKeyEvent
をシミュレートすることのようです。これにより、オプションメニューが表示されます。
BaseInputConnection mInputConnection = new BaseInputConnection( findViewById(R.id.main_content), true);
KeyEvent kd = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MENU);
KeyEvent ku = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MENU);
mInputConnection.sendKeyEvent(kd);
mInputConnection.sendKeyEvent(ku);