簡體   English   中英

Android:自定義鍵盤,可在操作欄中顯示可折疊的操作視圖?

[英]Android: Custom keypad for a collapsible action view in an action bar?

我已經在操作欄中添加了自定義ActionView,它旨在允許用戶通過輸入數字來查找內容。 但是,即使我指定了imeType的數字,我用於布局的EditText總是顯示完整的字母數字鍵盤。 我不需要字母數字鍵盤。 哎呀,我什至都不想要+/-類型選項。 只需0-9即可完成。 如何使用自定義鍵盤讓EditText進行搜索? 有沒有辦法做一個下拉鍵盤? 我希望只為該字段編寫自定義IME,但看來這是不允許的。

菜單的XML:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/menu_keypad"
        android:icon="@drawable/ms_btn_keypad_sel"
        android:title="Keypad"
        android:showAsAction="ifRoom|collapseActionView"
        android:actionLayout="@layout/keypad_actionview"/>
</menu>

用於操作布局的XML:

<EditText xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/keypad_actionview"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:textColor="@color/White"
      android:drawableLeft="@drawable/icon_channel_keypad"
      android:drawablePadding="5dp"
      android:inputType="number"
      android:imeOptions="flagNoExtractUi"
      />

用於設置操作欄菜單的Java:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.number_menu, menu);
    keypadMenuItem = menu.findItem(R.id.menu_keypad);
    final EditText keypadText = (EditText) keypadMenuItem.getActionView();
    keypadText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(final TextView textView, final int i, final KeyEvent keyEvent) {
            keypadMenuItem.collapseActionView();
            changeDisplayedNumber(Integer.valueOf(textView.getText().toString()), true);
            textView.setText("");
            return true;
        }
    });
    keypadMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            startAutoHidePlayerControlsRunner();
            return true;  // Return true to collapse action view
        }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            stopAutoHidePlayerControlsRunner();
            keypadText.setText("");
            keypadText.requestFocus();
            /*keypadText.setInputType(InputType.TYPE_CLASS_NUMBER);
            InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
            if (inputMethodManager != null) {
                inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
            }*/
            return true;  // Return true to expand action view
        }
    });

    return true;
}

Java末尾注釋掉的代碼是試圖強制鍵盤立即顯示,但這引起了一些奇怪的行為-彈出非數字鍵盤。

我意識到這是華碩鍵盤的默認輸入問題

是的,《變形金剛》在這個問題上似乎有些破損。 話雖如此,請記住,沒有IME一定會尊重任何給定的inputType 例如,Graffiti IME都是基於筆的,因此可能沒有“數字”與“文本”的真實概念。 inputType是請求,而不是合同。

我可以強制換成其他輸入法嗎

否。如果可能的話,這可能會帶來一些討厭的惡意軟件。

有什么巧妙的方法可以使actionView在操作欄中具有edittext,在下拉菜單/底部具有自定義鍵盤

歡迎您在EditText取得焦點( setOnFocusChangeListener() )之后進行控制,然后執行一些操作,例如使迄今為止已經消失的非活動自定義鍵盤可見,或者顯示您侵入數字鍵盤的ListPopupWindow ,或者...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM