[英]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.