2014-04-25 19 views
14

Tôi có chế độ xem web với biểu mẫu nhập thẻ tín dụng (với các trường tiêu chuẩn <input type="text" />). Trong các phiên bản Android khác nhau, tôi nhận được các bàn phím khác nhau. Kit-Kat dường như không hiển thị Trước đó/Tiếp theo phím khi bên trong biểu mẫu.HTML WebView của Android có thể ảnh hưởng đến các tính năng bàn phím hoặc bàn phím không?

  1. Về phía web, tôi có ảnh hưởng gì đến điều này không?
  2. Nếu không, những gì tôi có nên giới thiệu cho nhà phát triển cho phía Android không?

Ví dụ mà không Trước/Tiếp:

Cùng webview, với Trước/Tiếp:

enter image description here

Trả lời

15

Bạn có thể điều khiển bàn phím từ WebView, nhưng các câu trả lời khác cho thấy nó có thể không hoạt động với mọi bàn phím từng được thực hiện. Mặc dù vậy, tôi thường thấy hầu hết các bàn phím chính thống đã thực hiện hành vi mà tôi muốn.

WebView có phương thức được gọi là onCreateInputConnection. Bạn có thể móc vào phương thức này và thêm (và/hoặc xoá) cờ vào inputType và/hoặc imeOptions. Có rất nhiều lá cờ có sẵn cho bạn.

Kiểm tra các tùy chọn EditorInfo, cụ thể là IME_FLAG_NAVIGATE_NEXTIME_FLAG_NAVIGATE_PREVIOUS. Xem cách sử dụng dưới đây (mà loại bỏ các prev/cờ tiếp theo từ các tùy chọn bàn phím):

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
    InputConnection inputConnection = super.onCreateInputConnection(outAttrs); 
    outAttrs.imeOptions = outAttrs.imeOptions & ~EditorInfo.IME_FLAG_NAVIGATE_NEXT & 
       ~EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS; 
    return inputConnection; 
} 

Một điều bạn có thể thử là để che giấu những gợi ý toàn bộ thanh bằng cách sử dụng InputType cờ TYPE_TEXT_FLAG_NO_SUGGESTIONS. Xem ví dụ bên dưới (thêm cờ "không có đề xuất" vào loại đầu vào):

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
    InputConnection inputConnection = super.onCreateInputConnection(outAttrs); 
    outAttrs.inputType = outAttrs.inputType | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; 
    return inputConnection; 
} 

Có nhiều cờ khác để chơi trực tiếp tùy chỉnh IME từ WebView. Tham khảo các nhà phát triển để các trang được liên kết và bạn hy vọng sẽ có thể đạt được các hành vi bạn đang sau khi trên hầu hết các bàn phím.

3

Bạn có một số kiểm soát tối thiểu, nhưng không phải là nhiều. Loại điều khiển (passowrd, số, văn bản) sẽ được gửi tới bàn phím mềm và được sử dụng để thay đổi cách hiển thị mọi thứ. Tuy nhiên, các lựa chọn bàn phím dựa trên các tùy chọn này là bàn phím cụ thể- bàn phím Google phản ứng khác với Swype, phản ứng khác với Swiftkey, phản ứng khác với bàn phím Samsung, v.v. Bạn không thể thực sự dựa vào hành vi cụ thể.

+0

Cảm ơn Gabe.Có bất kỳ điều gì tôi có thể yêu cầu nhà phát triển Android thử nghiệm về mặt này không? – artlung

+0

Sẽ rất khó để làm như vậy. Bởi vì tất cả các bàn phím bạn về cơ bản không biết người dùng nào sử dụng. Về lý thuyết nếu tất cả bàn phím của bên thứ ba được mã hóa theo những cách tương tự, bạn thậm chí có thể yêu cầu họ phân tích cú pháp html cho các thẻ "" và cho phép họ áp dụng tùy chọn IME cho bàn phím để ghi đè. Nhưng một thành công không được đảm bảo với phương pháp này. – StingRay5

1

Đã thử trên Android Studio 3.0 (SDK API 26), câu trả lời https://stackoverflow.com/a/23462658/3286489 bị treo. Sau khi tìm kiếm tiếp tục tìm thấy điều này làm việc.

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
    InputConnection inputConnection = new BaseInputConnection(this, true); 
    outAttrs.imeOptions = outAttrs.imeOptions & ~EditorInfo.IME_FLAG_NAVIGATE_NEXT & 
      ~EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS; 
    return inputConnection; 
} 

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
    InputConnection inputConnection = new BaseInputConnection(this, true); 
    outAttrs.inputType = outAttrs.inputType | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; 
    return inputConnection; 
} 
Các vấn đề liên quan