Bàn phím trên màn hình Android tự động bật lên


140

Một trong những ứng dụng của tôi có "màn hình mở" (về cơ bản là một menu) có một EditTextvài Buttongiây theo sau . Vấn đề là một số người dùng của tôi đang báo cáo rằng khi họ mở ứng dụng, nó sẽ tự động bật lên bàn phím trên màn hình mà không cần chạm vào EditText. Theo như tôi có thể nói, tất cả những người dùng này đang sử dụng HTC Hero .

Đây có phải là một lỗi trong 1.5? Có bất cứ điều gì tôi có thể làm về nó?


1
Nếu đó là một lỗi, có lẽ đó là trong Sprint Hero. Sprint có phiên bản Android lỗi trên Heros mà họ bán và dường như họ không vội vàng trong việc đưa ra các lỗi cho nó. Có rất nhiều sự khác biệt trong hành vi giữa Sprint Heros và tất cả các thiết bị Android khác. Theo như tôi biết thì các phiên bản khác của Anh hùng, chẳng hạn như những phiên bản ở Châu Âu không có những vấn đề này.
Đánh dấu B

Thật không may, Hero ở đây tại châu Âu có vấn đề lớn, chúng thay đổi tùy thuộc vào số lượng xây dựng nhưng chúng tôi đã gặp phải 3 - 4 lỗi lớn.
Donal Rafferty

Câu trả lời:


279

Bạn có thể sử dụng dòng mã sau đây trong phương thức onCreate của hoạt động để đảm bảo bàn phím chỉ bật lên khi người dùng nhấp vào EditText

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

Điều này không phù hợp với tôi (2.2 MyTouch 3G). Trong phương thức onCreate () của tôi, tôi gọi setSoftInputMode (). EditText vẫn khiến bàn phím hiển thị :(
Nate

Điều này làm việc cho tôi. Tôi đang chạy Android 2.3.4 và đang phát triển bằng <used-sdk android: minSdkVersion = "3" />
Sandy

78
Hoặc sử dụng android:windowSoftInputMode="stateHidden"như ở đây
Swato

Vì vậy, điều khiến tôi bối rối là tôi có một hoạt động đăng nhập dường như đang ẩn bàn phím tốt. Bây giờ tôi cũng đã thực hiện một hoạt động đăng ký nhưng bàn phím bật lên theo mặc định. Vì vậy, làm thế nào là một đăng nhập tránh điều này? Tôi không thể tìm thấy setSoftInputMode trong hoạt động đăng nhập hoặc thuộc tính windowSoftInputMode trong Activity.xml.
Chucky

không phải lúc nào cũng hoạt động: trên một số thiết bị, SOFT_INPUT_STATE_ALWAYS_HIDDEN gây ra lỗi mà văn bản chỉnh sửa không phải là lần cuối cùng trong hoạt động có thể khiến bàn phím mềm xuất hiện. sử dụng "android: windowSoftInputMode =" stateHidden "" trong tệp kê khai cũng có tác dụng tương tự. tài liệu dành cho nhà phát triển nói rằng bàn phím mềm sẽ không tự động xuất hiện trừ khi nó bị ép buộc, nhưng điều đó hoàn toàn sai.

85
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name"
              android:windowSoftInputMode="stateHidden"
              >

Điều này hoạt động cho Android 3.0, 3.1, 3.2, 4.0 - Trình chỉnh sửa được sử dụng để biên dịch (Eclipse 3.7)

Đặt 'windowSoftInputMode = "stateHidden"' trong tệp XML tệp kê khai của ứng dụng của bạn cho hoạt động EACH mà bạn muốn cho bàn phím phần mềm được ẩn đi. Điều này có nghĩa là bàn phím sẽ không tự động xuất hiện và người dùng sẽ phải 'nhấp chuột vào' trường văn bản để đưa nó lên. Tôi đã tìm kiếm gần một giờ cho một cái gì đó hoạt động vì vậy tôi nghĩ rằng tôi sẽ chia sẻ.


Giải pháp tốt nhất tôi đã tìm thấy cho đến nay. Tập trung trường mà không cần mở bàn phím. Hoạt động trên Nexus S với 4.1.2
alexismorin

1
android: windowSoftInputMode = "stateHidden | điều chỉnhNoth" cũng hữu ích nếu bạn đang sử dụng các đoạn và bạn không muốn bàn phím thay đổi bố cục
whyoz

6

Thêm phần này vào AndroidManifest.xml của bạn :

android:windowSoftInputMode="stateHidden|adjustResize"

Nó hoạt động hoàn hảo. :)


1
Cảm ơn bạn đã trả lời. Tôi xin lỗi, làm thế nào tôi có thể gọi bàn phím bây giờ? Nó sẽ không xuất hiện khi gọi requestFocus().
Takesi Tokugawa YD

6

Mã này sẽ hoạt động trên tất cả các phiên bản 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);
 }

Thêm 1 để biết cái nào bật lên và cái nào không
lập trình ứng dụng Demon

4

Thêm phần này trong bố trí cha của XML.

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

Nó đảm bảo sự tập trung không phải vào editText khi Activity bắt đầu.


3

Bạn có thể sử dụng phương thức này trong phương thức onCreate () của hoạt động

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

hoặc dán mã này vào các thẻ Hoạt động trong AndroidManifest.xml

android:windowSoftInputMode="stateVisible"

2
Tôi nghĩ bạn có nghĩa là "stateHidden" chứ không phải "stateVisible".
stevehs17

2

Bạn có thể thêm một dòng mã trong Android Mainfest.xml trong thẻ hoạt động

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

điều này có thể giúp bạn


1

Trong phiên bản Android đó, khi chế độ xem bị thổi phồng, tiêu điểm sẽ được đặt thành điều khiển có thể lấy nét đầu tiên theo mặc định - và nếu không có bàn phím vật lý, bàn phím trên màn hình sẽ bật lên.

Để khắc phục điều này, rõ ràng đặt tiêu điểm ở một nơi khác. Nếu tiêu điểm được đặt thành bất kỳ thứ gì ngoài EditText, bàn phím trên màn hình sẽ không xuất hiện.

Bạn đã thử kiểm tra điều này bằng cách chạy Android 1.5 trong trình giả lập chưa?


Tôi đã thử nó trong trình giả lập (và chỉ cần làm lại để đảm bảo rằng tôi không bị điên). Nó hoạt động "đúng" (có nghĩa là không có bàn phím bật lên). Ngoài ra, khi tôi viết bài này, G1 của tôi đã chạy 1.5 và nó không hoạt động theo cách này (khi bàn phím của họ bị "ẩn").
Jeremy Logan

Tôi vẫn đặt cược nó có một cái gì đó để làm với trọng tâm ban đầu. Có thể đó là một cái gì đó cụ thể cho HTC Hero, nhưng tôi sẽ thử đặt tiêu điểm rõ ràng sang một thứ khác và xem liệu điều đó có khắc phục nó cho người dùng của bạn không.
Đánh dấu B

Có cách nào để tập trung "không có gì" không?
Jeremy Logan

1
Điều này không phù hợp với tôi (2.2 MyTouch 3G). Trong phương thức onCreate () của tôi, tôi gọi một cách rõ ràng requestF Focus () trên một Nút, đây là tiện ích thứ hai trong dạng xem. EditText vẫn khiến bàn phím hiển thị :(
Nate

1

Bạn có thể làm điều đó theo lập trình như

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

hoặc thiết lập android:windowSoftInputMode="stateHidden"<activity tagbên trongAndroidManifest.xml


1

Bao gồm điều này khi nhập khẩu là hàng đầu:

import android.view.WindowManager;

Thêm mã này vào phần OnCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* Đây là dành cho Android.xamarin và FindF Focus () - nó tìm kiếm chế độ xem theo phân cấp bắt nguồn từ chế độ xem này hiện có tiêu điểm, vì tôi có _enterPin.RequestF Focus () trước mã trên do đó nó hiển thị bàn phím cho _enterPin EditText *

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.