Vô hiệu hóa chế độ xem chỉnh sửa toàn màn hình cho đầu vào bàn phím mềm trong ngang?


237

Trên các thiết bị Android sử dụng bàn phím mềm, tôi muốn ngăn chế độ xem chỉnh sửa bàn phím toàn màn hình (hiển thị bên dưới) xuất hiện khi ở chế độ ngang (tức là tôi chỉ muốn nhìn thấy bàn phím mềm và chế độ xem phía sau nó).

Tôi giả sử điều này có thể đạt được bằng cách sử dụng setExtractViewShown(false)phương thức trên InputMethodService, nhưng tôi không thể truy cập vào thể hiện mặc định của điều này và không muốn thực hiện một phương thức nhập liệu tùy chỉnh.

Chế độ xem chỉnh sửa toàn màn hình Android

Đã chỉnh sửa để thêm: chế độ xem đầu vào đang diễn ra không phải là TextView(đó là một triển khai Viewtùy chỉnh InputConnection), vì vậy android:imeOptions="flagNoExtractUi"sẽ không hoạt động ở đây.


Hãy thử xem nó. Nó tốt cho bạn [Nhìn sang cái này] [1] [1]: stackoverflow.com/questions/8648401/
mẹo

Tôi có một vấn đề tương tự :( bạn có thể có bất kỳ ý tưởng nào không? stackoverflow.com/questions/36914290/iêu
railwanderer

2
Làm thế nào để áp dụng điều này trong toàn bộ ứng dụng. Chúng tôi sẽ không thêm giá trị thuộc tính trong mỗi edittext trong xml.
Vikas Pandey

2
Nhiều câu trả lời dưới đây khuyên bạn nên sử dụng flagNoExtractUihoặc IME_FLAG_NO_EXTRACT_UI. Tuy nhiên, trong tài liệu IME_FLAG_NO_EXTRACT_UItương ứng với flagNoExtractUi, nó nói rằng "Sử dụng cờ này không được khuyến khích và nó có thể bị phản đối trong tương lai", do đó, flagNoFullscreentùy chọn được đề xuất.
ThomasW

Câu trả lời:


178

Cuối cùng tôi đã trả lời câu hỏi của riêng tôi:

UI trích xuất (tức là chế độ chỉnh sửa toàn màn hình) có thể bị vô hiệu hóa tại điểm kết nối đầu vào được nối:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}

215
chỉ cần đặt vào tệp xml android của bạn: imeOptions = "flagNoExtractUi"

1
jnic, bạn đã thực hiện ghi đè ở đâu trong mã bàn phím mềm? SoftPal.java? Tôi đã thử ghi đè tương tự và lỗi.

14
Bạn có thể muốn thêm cờ vào các tùy chọn thay vì ghi đè những tùy chọn đã từng được truyền vào như sau:outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
ObsidianX

2
@ user726518 làm thế nào để áp dụng thuộc tính này trên mục hộp tìm kiếm trong thanh hành động?
Menna-Allah Sami

1
Điều duy nhất hoạt động khi sử dụng Chế độ xem tùy chỉnh để xử lý bàn phím. Cảm ơn!
Herman

109

Để làm điều đó, điều hướng đến hoạt động xml và dán android:imeOptions="flagNoExtractUi"mã của bạn. Nhưng nó nên được dán ở đâu? Hãy xem mã của hoạt động ví dụ xml và xem EditText:

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

    <EditText
        android:imeOptions="flagNoExtractUi"
        android:id="@+id/etTextInAct"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >   
        <requestFocus />
    </EditText>

</LinearLayout>

Nếu bạn muốn có thêm tùy chọn tùy chỉnh cho bàn phím, hãy xem http://developer.android.com/guide/topics/ui/controls/text.html


64

thêm thuộc tính android:imeOptions="flagNoExtractUi"cho mỗi EditTexttrong XMLtập tin của bạn .


1
Câu trả lời này quá ngắn và không đáp ứng tiêu chuẩn chất lượng SO. Vui lòng cải thiện nó thêm một số giải thích bổ sung, để nó sẽ hữu ích cho cộng đồng và không chỉ cho OP.
Lorenzo Donati - Codidact.org

31
@LorenzoDonati chính xác đó là những gì bạn phải làm ... đó là một câu trả lời rất đơn giản vì giải pháp rất đơn giản và đó chỉ là một cách làm khác với các câu trả lời ở trên. Ngoài ra, câu trả lời không thể "quá ngắn" trừ khi họ không trả lời câu hỏi, IMO.
Michael Yaworski

1
Xin lỗi, nhưng đây không phải là những gì cộng đồng SO nghĩ về nó. Các câu trả lời không nên giới hạn để giải quyết vấn đề của OP, chúng nên là những câu trả lời tuyệt vời nói chung. Xem cái nàycái này chẳng hạn.
Lorenzo Donati - Codidact.org

22
@LorenzoDonati đó là một câu hỏi rất cụ thể chỉ có một kết quả cuối cùng (nhưng có nhiều cách để giải quyết nó). Câu trả lời của tôi là một bổ sung cho các câu trả lời khác trên trang này. TẤT CẢ các câu trả lời trên trang này chỉ giới hạn trong "vấn đề của OP" bởi vì đó là loại câu trả lời duy nhất có thể được viết. Như tôi đã nói, nó cụ thể và đơn giản.
Michael Yaworski

2
Cuối cùng, tôi đã tìm thấy câu trả lời. cảm ơn bạn rất nhiều @mike yaworski
Drx

53

Câu trả lời ở trên đã giúp tôi tìm ra giải pháp cho EditTexts được thêm động:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

37

Sử dụng android:imeOptions="flagNoFullscreen"để đạt được tính năng đó.


1
cách tiếp cận tốt đẹp và tốt hơn để viết trong xml. Làm việc cho tôi. Cảm ơn
Ahesanali Suthar

1
Lưu ý rằng trong tài liệu IME_FLAG_NO_EXTRACT_UItương ứng với flagNoExtractUi, nó nói rằng "Sử dụng cờ này không được khuyến khích và nó có thể bị phản đối trong tương lai", do đó, flagNoFullscreentùy chọn được đề xuất.
ThomasW

12

Ngoài ra, nếu bạn muốn kết hợp nhiều chương trình imeOptions, bạn có thể sử dụng | cú pháp.

Ví dụ: để tắt chế độ xem chỉnh sửa toàn màn hình ở chế độ ngang và thay thế phím "Tiếp theo" bằng "OK" (ACTION_DONE) trong bàn phím, bạn có thể sử dụng:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);

9

Nếu bạn đang sửa đổi IME trực tiếp, bạn có thể ngăn nó hiển thị ExtractedView bằng cách ghi đè onUpdateExtractingVisibility:

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}

6

Tôi biết rằng hơi muộn một chút nhưng với bất kỳ ai vẫn quan tâm, đây là giải pháp của tôi: Trong trường hợp của tôi, tôi có một Hoạt động phong cảnh có chứa EditText ở trên đầu và tôi cần triển khai tính năng tự động hoàn tất trong hoạt động tìm kiếm này , đó là sự chồng chéo bàn phím gây ra sự cố mà người dùng không thể thấy kết quả của RecyclerView . Vì vậy, cuối cùng tôi đã có EditText này trong bố cục của mình:

<EditText
  android:layout_width="match_parent"
  android:layout_height="?actionBarSize"
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />

Chúc mừng!


5

Giải pháp của tôi:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"

Đây là một câu trả lời cập nhật hơn.
alierdogan7

2

Bạn có thể dùng :

android:imeOptions="flagNoFullscreen" 

trong edittext của bạn


1
Đây có phải là một câu trả lời?
artgb

Tôi thử nó và nó làm việc cho tôi! (Thiết bị của tôi là Android 4.1.2)
Thientvse

0

Bạn có thể gọi để ẩn bàn phím mềm và xóa tiêu điểm khỏi searchview.

public void hideKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

super.clearFocus();
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.