Làm cách nào để loại bỏ tiêu điểm tự động / cửa sổ bật lên bàn phím của một trường khi màn hình hiển thị?


105

Tôi có một màn hình trong đó trường đầu tiên là một EditText và nó lấy được tiêu điểm khi khởi động, cũng bật lên kiểu nhập số, điều này rất khó chịu

Làm cách nào tôi có thể đảm bảo rằng khi hoạt động được bắt đầu, tiêu điểm sẽ không đạt được và / hoặc bảng nhập liệu không được nâng lên?

Câu trả lời:


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

hoặc là

đặt thuộc tính hoạt động trong tệp kê khai như bên dưới trong thẻ ứng dụng

android:windowSoftInputMode="stateHidden"

Đặt android: windowSoftInputMode trong tệp AndroidManifest.xml có thể được ORed với các giá trị khác. Chế độ thường ngụ ý các giá trị đơn lẻ nhưng trong trường hợp này, giá trị là một tập hợp các cờ. Mô tả các giá trị:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
Jeff Muir

145

chuyển đến tệp kê khai ứng dụng của bạn và viết dòng này cho hoạt động mà bạn muốn tắt cửa sổ bật lên bàn phím tự động.

android:windowSoftInputMode="stateHidden"

Không làm việc cho tôi. Tôi đặt nó trong activity_main.xml. Điều này hoạt động hoàn hảo khi tôi đặt nó vào onCreate (). getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
glez

20

Để bàn phím không hiển thị theo chương trình, nhưng widget mặc định vẫn nhận cuộc gọi tiêu điểm:

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

trong onResume()


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

gọi phương thức trên bên trong onCreate () . Nó ngăn softKeyboard hiển thị trừ khi người dùng chọn EditText bằng cáchtapping or clicking.

hoặc chỉ cần thêm android:windowSoftInputMode="stateHidden"thẻ Hoạt động trongManifest.xml


10

Đây thường là một mớ hỗn độn. Điều đầu tiên tôi thử là cố gắng đánh cắp tiêu điểm bằng một chế độ xem khác. Bạn cũng phải cóInTouchMode có thể lấy nét và lấy nét được.

<TextView
  ...
  android:focusable="true"
  android:focusableInTouchMode="true">

    <requestFocus/>
</TextView>

Những công việc này. Tôi cảm thấy đây là một cách tiếp cận sạch hơn nhưng nó cũng phụ thuộc vào điều kiện của bạn như thế nào. Tôi đang chấp nhận cái này.
JaydeepW

5

Có một cái nhìn khác lấy tiêu điểm. Theo mặc định, Chế độ xem có thể lấy tiêu điểm đầu tiên sẽ lấy tiêu điểm khi bố cục được thổi phồng. Bạn có thể yêu cầu tiêu điểm trên một Chế độ xem khác qua XML:

<TextView
    android:layout_width="wrap_parent"
    android:layout_height="wrap_content"
    android:text="Some other view">

    <requestFocus />
</TextView>

Điều này hoạt động cho mọi Chế độ xem.

Nếu bạn muốn làm điều đó theo chương trình, bạn có thể sử dụng view.requestFocus().


0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

3
Chào mừng bạn đến với StackOverflow! Điều này không giống như các diễn đàn khác, nếu bạn muốn thay đổi câu trả lời của mình, chỉ cần nhấp vào editliên kết và thực hiện thay đổi của bạn. Và hãy cố gắng định dạng mã của bạn bằng cách chọn mã của bạn và sử dụng nút Mẫu mã {}hoặc nhấn Ctrl+K.
Peter Lang

0

Việc thêm android:windowSoftInputMode="stateHidden"vào Hoạt động của bạn trong tệp kê khai chỉ ẩn bàn phím khi bạn đang khởi chạy hoạt động hoặc như Google nói

Khi người dùng chắc chắn điều hướng tới hoạt động, thay vì quay lại hoạt động đó vì rời khỏi hoạt động khác

Để ẩn bàn phím khi người dùng nhấn nút quay lại và quay lại hoạt động của bạn từ một số hoạt động khác, hãy sử dụng android:windowSoftInputMode="stateAlwaysHidden"


-1

Tôi chưa thử điều này cũng như không ở gần máy tính lập trình của mình, nhưng tôi nghi ngờ việc gửi tiêu điểm theo chương trình đến chế độ xem chính hoặc thứ gì đó tự nhiên có thể thực hiện thủ thuật - đó có nhiều khả năng là một giải pháp thay vì một giải pháp, nhưng lại không thể kiểm tra nó chỉ một ý nghĩ


1
Tôi đã thử điều đó nhưng không hiệu quả. Tôi đã gọi .requestFocus();trên một nút, và bàn phím vẫn bật lên.
Pentium10

suy nghĩ có thể được thêm vào như là bình luận
Alberto M
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.