簡體   English   中英

Android 屏幕鍵盤自動彈出

[英]Android on-screen keyboard auto popping up

我的一個應用程序有一個“打開屏幕”(基本上是一個菜單),它有一個EditText后跟幾個Button 問題是我的幾個用戶報告說,當他們打開應用程序時,它會自動彈出屏幕鍵盤,而他們甚至沒有觸摸EditText 據我所知,所有這些用戶都在使用HTC Hero

這是 1.5 中的錯誤嗎? 有什么我可以做的嗎?

您可以在活動的 onCreate 方法中使用以下代碼行來確保鍵盤僅在用戶單擊 EditText 時彈出

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name"
              android:windowSoftInputMode="stateHidden"
              >

這適用於 Android 3.0, 3.1, 3.2, 4.0 - Editor Used to Compile (Eclipse 3.7)

將“windowSoftInputMode="stateHidden"”放在應用程序清單 XML 文件中,用於您希望軟件鍵盤保持隱藏狀態的每個活動。這意味着鍵盤不會自動出現,用戶必須“單擊”文本字段將其調出。 我搜索了將近一個小時的東西,所以我想我會分享。

此代碼適用於所有 android 版本:

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }

在你的AndroidManifest.xml 中添加:

android:windowSoftInputMode="stateHidden|adjustResize"

它完美地工作。 :)

將此添加到 XML 的父布局中。

android:focusable="true" 
android:focusableInTouchMode="true"

它確保在 Activity 啟動時焦點不在 editText 上。

您可以在活動的 onCreate() 方法中使用它

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

或將此代碼粘貼到 AndroidManifest.xml 的 Activity 標簽中

android:windowSoftInputMode="stateVisible"

您可以在Android Mainfest.xml 中的活動標簽下添加單行代碼

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

這可能對你有幫助。

在那個版本的 Android 中,當視圖膨脹時,默認情況下焦點將設置為第一個可聚焦的控件 - 如果沒有物理鍵盤,屏幕鍵盤將彈出。

要解決此問題,請在其他地方明確設置焦點。 如果焦點設置為 EditText 以外的任何內容,屏幕鍵盤將不會出現。

您是否嘗試通過在模擬器中運行 Android 1.5 來測試它?

您可以像這樣以編程方式執行此操作

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

或者在AndroidManifest.xml中的<activity tag設置android:windowSoftInputMode="stateHidden"

在導入位於頂部的位置包含此內容:

import android.view.WindowManager;

在 OnCreate 部分添加此代碼:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

*這是針對 Android.xamarin 和 FindFocus()-它搜索以當前具有焦點的視圖為根的層次結構中的視圖,因為我在上述代碼之前有 _enterPin.RequestFocus() 因此它顯示了 _enterPin EditText 的鍵盤 *

如果你使用的是fragment,如果你想隱藏鍵盤,你需要每次在onResume和onCreate中調用hideKeyboard。

    @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "SectionMyFragment onResume");
        hideKeyboard();
    }

private void hideKeyboard() {
    if (getActivity() != null) {
        InputMethodManager inputMethodManager = (InputMethodManager)
                getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);

        if (inputMethodManager != null) {
            if (getActivity().getCurrentFocus() != null) {
                Log.d(TAG, "hideSoftInputFromWindow 1");
                inputMethodManager.hideSoftInputFromWindow((getActivity().getCurrentFocus()).getWindowToken(), 0);
            }
        }
    }
}

暫無
暫無

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

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