Cách ẩn Bàn phím mềm khi hoạt động bắt đầu


151

Tôi có một Edittext với android:windowSoftInputMode="stateVisible"trong Manifest. Bây giờ bàn phím sẽ được hiển thị khi tôi bắt đầu hoạt động. Làm thế nào để che giấu nó? Tôi không thể sử dụng android:windowSoftInputMode="stateHiddenvì khi bàn phím hiển thị thì thu nhỏ ứng dụng và tiếp tục ứng dụng. Bàn phím sẽ hiển thị. Tôi đã thử với

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

nhưng nó không hoạt động.

Câu trả lời:


1

Nếu bạn không muốn sử dụng xml, hãy tạo Tiện ích mở rộng Kotlin để ẩn bàn phím

// In onResume, call this
myView.hideKeyboard()

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

Các lựa chọn thay thế dựa trên trường hợp sử dụng:

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Calls Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

Cách hiển thị bàn phím mềm

fun Context.showKeyboard() { // Or View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

Phương pháp đơn giản hơn khi đồng thời yêu cầu tập trung vào một edittext

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

Đơn giản hóa tiền thưởng:

Xóa yêu cầu cho từng sử dụng getSystemService: Thư viện Splitties

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)

361

Trong AndroidManifest.xml:

<activity android:name="com.your.package.ActivityName"
          android:windowSoftInputMode="stateHidden"  />

hay là thử

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

Vui lòng kiểm tra này cũng


3
Cảm ơn vì android:windowSoftInputMode="stateHidden"
Shylendra Madda

2
Trên thực tế cũng có câu trả lời tuyệt vời về việc ngăn chặn tập trung vào chỉnh sửa văn bản stackoverflow.com/questions/4668210/
Khăn

204

Sử dụng các chức năng sau để hiển thị / ẩn bàn phím:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}

4
Context.INPUT_METHOD_SERVICE dành cho những người ở trong các mảnh vỡ hoặc không hoạt động chính, v.v.
Oliver Dixon

7
Bạn có thể thử điều này. Nó hoạt động nếu bạn gọi nó từ các hoạt động. getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Sinan Dizdarević

Điều gì xảy ra nếu chúng ta cần gọi điều này từ bên trong một người nghe? ThíchonFocusChange()
André Yuhai

44

Chỉ cần thêm hai thuộc tính vào khung nhìn cha của editText.

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

36

Đặt cái này trong tệp kê khai bên trong thẻ Activity

  android:windowSoftInputMode="stateHidden"  

hoặc android: windowSoftInputMode = "stateUnchanged" - Cách này hoạt động như sau: không hiển thị nếu nó chưa được hiển thị, nhưng nếu nó được mở khi tham gia hoạt động, hãy để nó mở).
Sujeet Kumar Gupta

ya bạn đúng Nhưng nếu định hướng thay đổi thì sao?
Saneesh

26

Thử cái này:

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

Nhìn vào cái này để biết thêm chi tiết.


14

Để ẩn bảng phím mềm tại thời điểm Hoạt động mới bắt đầu hoặc onCreate(), onStart()v.v. , bạn có thể sử dụng mã bên dưới:

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

10

Sử dụng AndroidManifest.xml

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

Sử dụng Java

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

sử dụng bàn phím giải pháp ở trên ẩn nhưng edittext không lấy nét khi activiy được tạo, nhưng lấy nó khi bạn chạm vào chúng bằng cách sử dụng:

thêm vào EditText của bạn

<EditText
android:focusable="false" />

đồng thời thêm trình lắng nghe EditText của bạn

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});

7

Thêm văn bản sau vào tệp xml của bạn.

<!--Dummy layout that gain focus -->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical" >
            </LinearLayout>

6

Tôi hy vọng điều này sẽ làm việc, tôi đã thử rất nhiều phương pháp nhưng phương pháp này hiệu quả với tôi fragments. chỉ cần đặt dòng này trong onCreateview / init.

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

5

Để ẩn bảng phím mềm tại thời điểm Hoạt động mới bắt đầu hoặc phương thức onCreate (), onStart (), v.v., hãy sử dụng mã dưới đây:

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

Để ẩn bảng phím mềm tại thời điểm Nút được nhấp vào hoạt động:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

5

Sử dụng SOFT_INPUT_STATE_ALWAYS_HIDDEN thay vì SOFT_INPUT_STATE_HIDDEN

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

5

thêm vào hoạt động của bạn trong biểu hiện tài sản này

android:windowSoftInputMode="stateHidden" 

4

Đặt mã này tệp java của bạn và truyền đối số cho đối tượng trên edittext,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

4

Bạn có thể đặt cấu hình trên AndroidManifest.xml

Thí dụ:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>

4

Sử dụng mã sau đây để ẩn bảng phím mềm lần đầu tiên khi bạn bắt đầu Hoạt động

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

3

Hãy thử cái này cũng được

Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

3

Câu trả lời trên cũng đúng. Tôi chỉ muốn nói ngắn gọn rằng có hai cách để ẩn bàn phím khi bắt đầu hoạt động, từ tệp kê khai. ví dụ:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • Cách trên luôn ẩn nó khi vào hoạt động.

hoặc là

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • Điều này nói rằng đừng thay đổi nó (ví dụ: không hiển thị nếu nó chưa được hiển thị, nhưng nếu nó được mở khi tham gia hoạt động, hãy để nó mở).

2

Đây là những gì tôi đã làm:

yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
        yourEditText.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);   // handle the event first
                InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard
                    yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
                }
                return true;
            }
        });

2

Nếu ứng dụng của bạn đang nhắm mục tiêu API Android cấp 21 trở lên, có sẵn một phương thức mặc định.

editTextObj.setShowSoftInputOnFocus(false);

Hãy chắc chắn rằng bạn đã đặt mã bên dưới trong EditTextthẻ XML.

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />

1

Thử cái này.

Đầu tiên trong xml có thể tìm kiếm của bạn, các trường (tên và gợi ý, v.v.) đặt @stringvà không phải là chuỗi ký tự.

Sau đó, phương thức onCreateOptionsMenu, nó phải có một ComponentNameđối tượng với tên gói của bạn và tên lớp đã hoàn thành của bạn (với tên gói) - Trong trường hợp hoạt động có SearchViewthành phần giống như sử dụng kết quả tìm kiếm hiển thị getComponentName(), như nhà phát triển google android nói.

Tôi đã thử rất nhiều giải pháp và sau nhiều, rất nhiều công việc giải pháp này hiệu quả với tôi.


1
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

this one worked for me

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

nó sẽ hoạt động


Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó.
rollstuhlfahrer
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.