1

ソフト キーボードを表示したまま、アクティビティのコンテキスト メニューを表示したいと思います。主なアクティビティのメニューを作成するコードは次のとおりです。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    boolean result = super.onCreateOptionsMenu(menu);

    MenuItem m = menu.add(0, LOGIN_MENU_ITEM, 0, "Login");
    m.setIcon(android.R.drawable.ic_menu_preferences); 
    m = menu.add(0, CONFIGURE_MENU_ITEM, 0, R.string.menu_settings);
    m.setIcon(android.R.drawable.ic_menu_preferences);
    m = menu.add(0, EXIT_MENU_ITEM, 0, R.string.menu_exit);
    m.setIcon(android.R.drawable.ic_menu_close_clear_cancel);
    m = menu.add(0, ABOUT_MENU_ITEM, 0, R.string.menu_about);
    m.setIcon(android.R.drawable.ic_menu_info_details);

    return result;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    boolean result = super.onOptionsItemSelected(item);
    Intent intent = null;

    switch (item.getItemId()) {
    case ABOUT_MENU_ITEM:
        if (m_AlertDlg != null) 
        {
            m_AlertDlg.cancel();
        }

        final SpannableString s = new SpannableString(getString(R.string.about).replace("\\n","\n").replace("${VERSION}", getVersion(this)));
        Linkify.addLinks(s, Linkify.WEB_URLS);

        m_AlertDlg = new AlertDialog.Builder(this)
        //          .setMessage(getString(R.string.about).replace("\\n","\n").replace("${VERSION}", getVersion(this)))
        .setMessage(s)
        .setTitle(getString(R.string.menu_about))
        .setIcon(R.drawable.icon22_click)
        .setCancelable(true)
        .show();

        ((TextView)m_AlertDlg.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());

        break;

    case EXIT_MENU_ITEM: 
        on(this,false);
        //          final Boolean exit_rem = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(Settings.PREF_REMEMBER, false);
        //          if (!exit_rem){
        //              Editor edit = PreferenceManager.getDefaultSharedPreferences(this).edit();
        //              edit.putString(Settings.PREF_USERNAME, "");
        //              edit.putString(Settings.PREF_PASSWORD, "");
        //              edit.commit();
        //          }
        Receiver.pos(true);
        Receiver.engine(this).halt();
        Receiver.mSipdroidEngine = null;
        Receiver.reRegister(0);
        stopService(new Intent(this,RegisterService.class));
        finish();
        break;

    case CONFIGURE_MENU_ITEM: 
        try {
            intent = new Intent(this, org.sparksoftsip.sipua.ui.Settings.class);
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
        }
        break;

    case LOGIN_MENU_ITEM: 
        LoginScreen();
        break;
    }

    return result;
}

私の主な活動では、開始時にフォーカスを受け取るカスタム AutoCompleteTextView を作成しました。ここでキーの押下を聞き、メニュー ボタンを聞いてコンテキスト メニューを開く予定です。しかし、私の現在のコードには何も起こっていません:

public class InstantAutoCompleteTextView extends AutoCompleteTextView {
public InstantAutoCompleteTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
    super.onWindowFocusChanged(hasWindowFocus);
}
private Activity getActivity() {
    Context context = getContext();
    if (context instanceof Activity) {
        return (Activity) context;
    } else {
        return null;
    }
}
@Override
public boolean enoughToFilter() {
    return true;
}


@Override
public boolean dispatchKeyEventPreIme(KeyEvent event)
{
    Activity activity = getActivity();
    if (KeyEvent.KEYCODE_BACK == event.getKeyCode() && event.getAction () == KeyEvent.ACTION_DOWN)
    {
        Log.v("", "Back Pressed");
        activity.onBackPressed();

        //Want to call this method which will append text
        //init();
    }

    if (KeyEvent.KEYCODE_MENU == event.getKeyCode() && event.getAction () == KeyEvent.ACTION_DOWN)
    {
        Log.e("hello", event.toString());
        activity.openContextMenu(activity.getWindow().getDecorView().findViewById(android.R.id.content));
    }
    return true;
    //return super.dispatchKeyEventPreIme(event);
}
}

使ってみました

openContextMenu(activity.getWindow().getDecorView().findViewById(android.R.id.content))

ただし、何も起こっていません。(activity.findViewById(android.R.id.content))とも試し(activity.findViewById(android.R.id.content).getViewRoot())ましたが、何も表示されません。これを解決するにはどうすればよいですか?

4

1 に答える 1

1

ばかげた間違いをしたようです。コンテキストメニューではなく、オプションメニューを使用しました。したがって、キーを押すためのコードは次のようになります。

openOptionsMenu()

使用する代わりに

openContextMenu(View)
于 2012-09-27T03:48:20.507 に答える