Ngăn bàn phím hiển thị khi bắt đầu hoạt động


265

Tôi có một hoạt động với một Edit Textđầu vào. Khi hoạt động được khởi tạo, bàn phím Android sẽ hiển thị. Làm thế nào bàn phím có thể bị ẩn cho đến khi người dùng tập trung đầu vào?


93
trong bảng kê khai của bạn<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger


1
Làm thế nào để sử dụng cùng với android:windowSoftInputMode="adjustPan"?
János

4
@ János android: windowSoftInputMode = "điều chỉnhPan | stateHidden"
Alexey Strakh

câu trả lời trong bình luận này, là câu trả lời tôi đang tìm kiếm: stackoverflow.com/a/23605510/6942602
korchix

Câu trả lời:


436

Tôi nghĩ rằng những điều sau đây có thể làm việc

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

Tôi đã sử dụng nó cho loại điều này trước đây.


Có cách nào để đặt nó thành bàn phím chỉ có chữ số không? tức là bàn phím 12Key?
Mohamed Khamis

@MohamedKhamis input.setRawInputType (Cấu hình.KEYBOARD_12KEY);
blockwala

1
Có nó vẫn hoạt động. @SagarNayak tại sao bạn muốn ẩn bàn phím EditText? :) Đây là để ẩn bàn phím khi hoạt động bắt đầu có chứaEditText
Martynas

@Devealte 7 năm sau và nó hoạt động với tôi, bạn đã đặt nó trong onCreate chưa?
Dymas

@Dymas Có, và tôi vừa sửa nó vài tháng trước :)
Devealte

180

Hãy thử điều này cũng -

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

Nếu không, hãy khai báo trong hoạt động của tệp kê khai của bạn -

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

Nếu bạn đã và đang sử dụng android:windowSoftInputModecho một giá trị như adjustResizehoặc adjustPan, bạn có thể kết hợp hai giá trị như:

<activity
        ...
        android:windowSoftInputMode="stateHidden|adjustPan"
        ...
        >

Điều này sẽ ẩn bàn phím bất cứ khi nào thích hợp, nhưng xoay chế độ xem hoạt động trong trường hợp bàn phím phải được hiển thị.


3
cảm ơn vì đã hiển thị cả trong mã và trong xml! Thật vậy, đây là câu trả lời đúng nhất! Đặc biệt, có lẽ là 3 phút bạn đã dành cả hai để viết cả hai phương pháp khiến bạn không phải là người đầu tiên ;-)
eric

34

Ẩn nó cho tất cả các hoạt động sử dụng chủ đề

<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

đặt chủ đề

<application android:theme="@style/MyTheme">

như cách tiếp cận toàn cầu này.
Rm558

1
Điều này hoạt động như tôi đã sử dụng các chủ đề khác nhau ở nhiều nơi khác nhau
nmxprime

22

Thêm hai thuộc tính này vào bố trí cha mẹ của bạn (ví dụ: Bố cục tuyến tính, Bố cục tương đối)

android:focusable="false"
android:focusableInTouchMode="false" 

Nó sẽ thực hiện các mẹo :)


2
Điều này không hiệu quả với tôi, tuy nhiên, đặt chúng truehoạt động, theo câu trả lời của Jack T. Có sự thay đổi hành vi trong các phiên bản gần đây?
Protean

Ngoài câu trả lời của tôi, bạn cần kiểm tra các thuộc tính khác mà bạn có trong bảng kê khai và chỉnh sửa văn bản.
Vua của các thánh lễ

Tôi chỉ có những tính chất cơ bản nhất trong chúng. Tôi không hiểu tại sao cài đặt những thứ này falsesẽ hoạt động, vì ý tưởng là lấy sự tập trung ra khỏi các hộp EditText.
Protean

Có lẽ nó được sử dụng để lấy tiêu điểm ra khỏi các hộp EditText bằng cách lấy nó ra khỏi bố cục cha mẹ? Nhưng dường như không còn nữa.
Protean

13

Cố gắng khai báo nó trong tập tin kinh nguyệt

<activity android:name=".HomeActivity"
      android:label="@string/app_name"
      android:windowSoftInputMode="stateAlwaysHidden"
      >

11

Nếu bạn đang sử dụng API cấp 21, bạn có thể sử dụng editText.setShowSoftInputOnF Focus (false);


9

Chỉ cần thêm vào AndroidManifest.xml

<activity android:name=".HomeActivity"  android:windowSoftInputMode="stateHidden">
</activity>

8

Chỉ cần thêm phần này vào tệp manifest.xml của bạn

<activity android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">

Bạn đã làm xong.


7

Bạn cũng có thể viết các dòng mã này trong bố trí cha mẹ trực tiếp của tệp bố cục .xml mà bạn có "vấn đề":

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

Ví dụ:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ...
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/myEditText"
        ...
        android:hint="@string/write_here" />

    <Button
        android:id="@+id/button_ok"
        ...
        android:text="@string/ok" />
</LinearLayout>


BIÊN TẬP :

Ví dụ nếu EditText được chứa trong bố cục khác:

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ... >                                            <!--not here-->

    ...    <!--other elements-->

    <LinearLayout
        android:id="@+id/theDirectParent"
        ...
        android:focusable="true"
        android:focusableInTouchMode="true" >        <!--here-->

        <EditText
            android:id="@+id/myEditText"
            ...
            android:hint="@string/write_here" />

        <Button
            android:id="@+id/button_ok"
            ...
            android:text="@string/ok" />
    </LinearLayout>

</ConstraintLayout>

Điều quan trọng là đảm bảo rằng EditText không thể lấy nét trực tiếp.
Tạm biệt! ;-)


6

Giải pháp tốt nhất cho tôi, dán lớp của bạn

@Override
public void onResume() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onResume();
}

@Override
public void onStart() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onStart();
}

3

Chức năng ẩn bàn phím.

public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();

    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

Ẩn bàn phím trong tệp AndroidManifext.xml.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">

3

Để mở rộng dựa trên câu trả lời được chấp nhận bởi @Lucas:

Gọi đây từ hoạt động của bạn trong một trong những sự kiện vòng đời đầu tiên:

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

Ví dụ về Kotlin:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}

2

Bạn có thể thử thiết lập thuộc tính duy nhất này cho từng thành phần

TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

Bàn phím sẽ không hiển thị trong khi yếu tố là trọng tâm


Trong khi điều này có thể trả lời câu hỏi của tác giả, nó thiếu một số từ giải thích và / hoặc liên kết đến tài liệu. Đoạn mã thô không hữu ích lắm nếu không có một số cụm từ xung quanh chúng. Bạn cũng có thể tìm thấy làm thế nào để viết một câu trả lời tốt rất hữu ích. Vui lòng chỉnh sửa câu trả lời của bạn - Từ đánh giá
Nick

1
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

0

chỉ cần thêm điều này vào Hoạt động của bạn:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
      if (getCurrentFocus() != null) {
           InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      }
      return super.dispatchTouchEvent(ev);
}
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.