亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何隱藏Android上的軟鍵盤,點擊外部EditText?

如何隱藏Android上的軟鍵盤,點擊外部EditText?

冉冉說 2019-07-08 15:07:05
如何隱藏Android上的軟鍵盤,點擊外部EditText?好的,每個人都知道要隱藏鍵盤,您需要實現:InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(getCurrentFocus() .getWindowToken(), 0);但是這里最重要的是當用戶觸摸或選擇任何其他不是鍵盤的地方時,如何隱藏鍵盤。EditText還是軟鍵盤?我試著用onTouchEvent()在我父母身上Activity但是,只有當用戶接觸到任何其他視圖并且沒有滾動視圖時,這才有效。我試圖實現一個觸摸,點擊,焦點偵聽器,但沒有任何成功。我甚至嘗試實現自己的滾動視圖來攔截觸摸事件,但我只能獲得事件的坐標,而不是單擊視圖。有什么標準的方法嗎?在iPhone中,這真的很容易。
查看完整描述

3 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

下面的代碼片段簡單地隱藏了鍵盤:

public static void hideSoftKeyboard(Activity activity) {
    InputMethodManager inputMethodManager = 
        (InputMethodManager) activity.getSystemService(
            Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(
        activity.getCurrentFocus().getWindowToken(), 0);}

您可以將其放在實用程序類中,或者如果要在活動中定義它,請避免使用活動參數,或調用hideSoftKeyboard(this).

最棘手的部分是什么時候叫它。您可以編寫一個方法來迭代View在您的活動中,并檢查它是否為instanceof EditText如果它不是注冊setOnTouchListener所有的東西都會就位。如果您想知道如何做到這一點,這實際上是相當簡單的。下面是您所做的工作,您可以編寫如下所示的遞歸方法,實際上您可以使用它來做任何事情,比如安裝自定義字體等等.這是方法

public void setupUI(View view) {

    // Set up touch listener for non-text box views to hide keyboard.
    if (!(view instanceof EditText)) {
        view.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                hideSoftKeyboard(MyActivity.this);
                return false;
            }
        });
    }

    //If a layout container, iterate over children and seed recursion.
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            View innerView = ((ViewGroup) view).getChildAt(i);
            setupUI(innerView);
        }
    }}

僅此而已,只需在您之后調用此方法即可。setContentView在你的活動中。如果您想知道您將傳遞哪個參數,則是id父容器的。分配id到父容器,如

<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>

打電話setupUI(findViewById(R.id.parent))僅此而已。

如果您想有效地使用它,您可以創建一個擴展Activity并將此方法放入應用程序中,并使應用程序中的所有其他活動擴展該活動并調用其setupUI()onCreate()方法。

希望能幫上忙。

如果使用了多個活動,請定義公共id到父級布局,如<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>

然后將類擴展到Activity并定義setupUI(findViewById(R.id.main_parent))在其OnResume()并擴展該類,而不是“活動”in your program


查看完整回答
反對 回復 2019-07-08
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

我覺得這個公認的答案有點復雜。

這是我的解決辦法。添加一個OnTouchListener你的主要布局

findViewById(R.id.mainLayout).setOnTouchListener(this)

并將以下代碼放入OnTouch方法中。

InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(getCurrentFocus()
.getWindowToken(), 0);

這樣,您就不必對所有視圖進行迭代。


查看完整回答
反對 回復 2019-07-08
  • 3 回答
  • 0 關注
  • 806 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號