development

프로그래밍 방식으로 옵션 메뉴를 여는 방법은 무엇입니까?

big-blog 2020. 12. 26. 16:32
반응형

프로그래밍 방식으로 옵션 메뉴를 여는 방법은 무엇입니까?


사용자가 메뉴 키를 클릭하지 않고 프로그래밍 방식으로 optionsMenu를 열고 싶습니다. 어떻게할까요?


아니면 그냥 Activity.openOptionsMenu ()를 호출 합니까?


활동이 아직 창에 연결되지 않았기 때문에 onCreate에서 수행하면 앱이 중단됩니다. 그렇게한다면 :

@Override
public void onAttachedToWindow() {
    openOptionsMenu(); 
};

...효과가있다.


의 새 Toolbar클래스를 사용하는 개발자 의 경우 다음 Support Library과 같이 수행됩니다.

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();

이를 수행하는 두 가지 방법 :

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();

오랜 연구와 많은 시도 끝에 유일한 방법은 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);

나를 위해 toolbar.showOverflowMenu()onClick 에서 선언 하는 것은 작동하지 않습니다. 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);

참조 URL : https://stackoverflow.com/questions/3133318/how-to-open-the-options-menu-programmatically

반응형