国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何以編程方式關閉/隱藏 Android 軟鍵盤?

做安卓開發(fā)的時候,會有各種各樣的想法和疑問,例如:怎么對軟鍵盤關閉或者怎么對軟鍵盤隱藏?震驚

問題

我的布局中有一個EditText和一個Button

在編輯字段中寫入并單擊 后Button,我想在觸摸鍵盤外部時隱藏虛擬鍵盤。我認為這是一段簡單的代碼,但是在哪里可以找到它的示例?

解決方法

為了澄清這種瘋狂行為,我首先代表所有 Android 用戶對 Google 對軟鍵盤的徹底荒謬的處理表示歉意。對于同一個簡單的問題,之所以有這么多不同的答案,是因為這個 API 和 Android 中的許多其他 API 一樣,設計得很糟糕。我想不出有什么禮貌的方式來表達它。

我想隱藏鍵盤。我期望向Android提供以下聲明:Keyboard.hide()。結束。非常感謝。但安卓有一個問題。您必須使用InputMethodManager來隱藏鍵盤。好吧,好吧,這是 Android 的鍵盤 API。但!您需要擁有Context才能訪問 IMM?,F(xiàn)在我們有一個問題。我可能想從沒有使用或不需要任何Context. 或者更糟糕的是,IMM 要求您指定要隱藏鍵盤的內(nèi)容View(或者更糟糕的是,指定要隱藏的內(nèi)容)。Window

這就是隱藏鍵盤如此具有挑戰(zhàn)性的原因。親愛的谷歌:當我查找蛋糕的食譜時,RecipeProvider地球上沒有人會拒絕向我提供食譜,除非我首先回答誰會吃蛋糕以及在哪里吃蛋糕!

這個悲傷的故事以丑陋的事實結束:要隱藏 Android 鍵盤,您將需要提供 2 種形式的標識: aContext以及 aView或 a Window。

我創(chuàng)建了一個靜態(tài)實用方法,只要您從Activity.

public static void hideKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    //找到當前聚焦的視圖,這樣我們就可以從中獲取正確的窗口令牌。
    View view = activity.getCurrentFocus();
    //如果當前沒有視圖具有焦點,則創(chuàng)建一個新視圖,這樣我們就可以從中獲取窗口令牌
    if (view == null) {
        view = new View(activity);
    }
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

請注意,此實用方法僅在從Activity!調(diào)用時才有效。上述方法調(diào)用getCurrentFocus目標Activity來獲取正確的窗口令牌。

EditText但是假設您想對托管在 a 中的主機隱藏鍵盤DialogFragment?您不能使用上面的方法:

hideKeyboard(getActivity()); //行不通

這是行不通的,因為您將傳遞對Fragment的 host 的引用Activity,而顯示 時主機將沒有焦點控制Fragment!哇!因此,為了隱藏片段中的鍵盤,我采用了較低級別、更常見且更丑陋的方法:

public static void hideKeyboardFrom(Context context, View view) {
    InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

以下是從浪費更多時間來追求此解決方案中收集到的一些附加信息:

關于windowSoftInputMode

還有一個爭論點需要注意。默認情況下,Android 會自動將初始焦點分配EditText給Activity. 很自然地,InputMethod(通常是軟鍵盤)將通過顯示自身來響應焦點事件。windowSoftInputMode當中的屬性設置AndroidManifest.xml為 時stateAlwaysHidden,指示鍵盤忽略此自動分配的初始焦點。

<activity
    android:name=".MyActivity"
    android:windowSoftInputMode="stateAlwaysHidden"/>

幾乎令人難以置信的是,當您觸摸控件時,它似乎沒有采取任何措施阻止鍵盤打開(除非focusable="false"和/或focusableInTouchMode="false"被分配給控件)。顯然,windowSoftInputMode設置僅適用于自動焦點事件,不適用于觸摸事件觸發(fā)的焦點事件。

因此,stateAlwaysHidden這個名字確實很糟糕。也許應該改為調(diào)用它ignoreInitialFocus。


更新:獲取窗口令牌的更多方法

如果沒有聚焦視圖(例如,如果您剛剛更改了片段,則可能會發(fā)生),還有其他視圖將提供有用的窗口令牌。

這些是上述代碼的替代方案,if (view == null)   view = new View(activity); 它們沒有明確引用您的活動。

在片段類中:

view = getView().getRootView().getWindowToken();

給定一個片段fragment作為參數(shù):

view = fragment.getView().getRootView().getWindowToken();

從您的內(nèi)容主體開始:

view = findViewById(android.R.id.content).getRootView().getWindowToken();

更新 2:清除焦點以避免在從后臺打開應用程序時再次顯示鍵盤

將此行添加到方法的末尾:

view.clearFocus();


文章來源地址http://www.zghlxwxcb.cn/article/423.html

到此這篇關于如何以編程方式關閉/隱藏 Android 軟鍵盤?的文章就介紹到這了,更多相關內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/423.html

如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請聯(lián)系站長進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • android:登錄界面,輸入框輸入數(shù)量達到了之后自動隱藏鍵盤。

    一、前言: 這篇文章是關于當我們輸入賬號密碼時,達到11位(自定義)時,自動隱藏鍵盤。 二、上代碼: 界面布局: 對應的Activity:LoginMainActivity 新建一個工具類:ViewUtil

    2024年02月12日
    瀏覽(17)
  • Android 全局監(jiān)聽軟鍵盤彈起隱藏 動態(tài)修改布局并適配無限循環(huán)的問題

    要在 Android 應用中全局檢測軟鍵盤的彈起,您可以使用 ViewTreeObserver.OnGlobalLayoutListener 監(jiān)聽器來監(jiān)聽布局樹的變化。當軟鍵盤彈起或隱藏時,布局樹會發(fā)生變化,因此您可以在監(jiān)聽器中捕獲這些變化。 在上面的代碼中, rootView 是您布局的根視圖,您需要將其替換為您實際布局

    2024年02月11日
    瀏覽(25)
  • pyqt5 QWidget 如何隱藏右上角的關閉和提示按鈕

    在 PyQt5 中,隱藏 QWidget 右上角的關閉按鈕(也稱為窗口關閉按鈕)可以通過修改窗口的窗口標志位(WindowFlags)來實現(xiàn)。具體如下: import sys from PyQt5.QtWidgets import QApplication, QWidget class MyWidget(QWidget): ??? def __init__(self): ??????? super().__init__() ??????? self.initUI() ??? de

    2024年02月14日
    瀏覽(31)
  • 如何在Windows 10中打開或關閉屏幕鍵盤

    電腦有幾種不同類型的鍵盤。最常見的類型是插入電腦的物理外部鍵盤。雖然 Windows 10 有觸摸鍵盤,但它也有一個內(nèi)置的易用工具,稱為屏幕鍵盤(OSK),可以代替物理鍵盤在電腦屏幕上移動或輸入文本。 使用OSK不需要觸摸屏。它顯示了一個帶有所有標準鍵的可視鍵盤,因此

    2024年02月16日
    瀏覽(30)
  • WPF --- 如何以Binding方式隱藏DataGrid列

    如題,如何以Binding的方式動態(tài)隱藏DataGrid列? 像這樣: 先在ViewModel創(chuàng)建數(shù)據(jù)源 People 和控制列隱藏的 IsVisibility ,這里直接以 MainWindow 為 DataContext 然后創(chuàng)建 VisibilityConverter ,將布爾值轉化為 Visibility 。 然后再界面綁定 IsVisibility ,且使用轉化器轉化為 Visibility ,最后增加一個

    2024年02月05日
    瀏覽(44)
  • python多線程編程:如何優(yōu)雅地關閉線程

    在并發(fā)編程中,我們可能會創(chuàng)建新線程,并在其中運行任務,可能由于一些原因,決定停止該線程。例如: 不再需要線程任務的結果了。 應用程序正在關閉。 線程執(zhí)行可能已經(jīng)出現(xiàn)了異常 關于python多線程編程知識,請參閱由淺入深掌握Python多線程編程 Threading 模塊的 Threa

    2023年04月18日
    瀏覽(22)
  • android如何通過adb快速開啟、關閉輔助副屏

    android如何通過adb快速開啟、關閉輔助副屏

    adb 指令 效果

    2024年02月01日
    瀏覽(23)
  • winform 關閉時隱藏到托盤

    winform 關閉時隱藏到托盤

    需求: 點擊主窗口關閉到托盤 1. 拖動一個notifyIcon 控件到窗口 2. 再動一個contextMenuStrip 到主窗口,做托盤里圖標右鍵菜單使用, 3.菜單里兩個選項: 顯示主界面和退出 4. 綁定?notifyIcon 的?contextMenuStrip 為contextMenuStrip1 5. 主頁面的FormClosing 事件,重寫后加 顯示任務欄圖標且顯

    2024年02月02日
    瀏覽(23)
  • VUE監(jiān)聽網(wǎng)頁關閉和隱藏顯示

    1.mounted()中創(chuàng)建頁面關閉的監(jiān)聽 ? 2.監(jiān)聽的是頁面關閉之前,對應的方法可以寫做 3.監(jiān)聽的是頁面關閉的時候,這里面可以調(diào)用自己的異步處理 4.destroyed()中,注銷監(jiān)聽

    2024年02月06日
    瀏覽(24)
  • 51單片機---編程實現(xiàn)流水燈----鍵盤控制數(shù)碼管顯示--利用74LS164擴展并行輸出口---定時中斷方式驅動一個數(shù)碼管

    目錄 基于51單片機,用c語言編程實現(xiàn)流水燈 代碼: 使用C語言編寫的基于51單片機的鍵盤控制數(shù)碼管顯示 代碼: 基于51單片機,用c語言編程實現(xiàn)利用74LS164擴展并行輸出口 代碼: 基于51單片機,用c語言編程實現(xiàn)定時中斷方式驅動一個數(shù)碼管? 代碼:? 1- 2- 上述代碼中,使用

    2024年02月16日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包