Tôi có một WebView và một số nút trong bố cục của tôi. Có một thẻ lớn trong WebView của tôi. Ứng dụng này được sử dụng để chỉnh sửa các tệp văn bản. Các nút được sử dụng để tạo hiệu ứng textarea bên trong WebView của tôi. Khi người dùng nhấn một nút (Chẳng hạn như nút mũi tên để di chuyển chế độ xem văn bản), nó sẽ đóng bàn phím. Tôi đã sử dụng toggleSoftInput, nhưng điều đó chỉ chuyển sang bàn phím để hiển thị hay không. Tôi muốn các nút dừng ẩn bàn phím mềm khi nhấn nút. Tôi đã không tìm thấy gì về vấn đề cụ thể của mình. Tôi đã tìm kiếm trong nhiều tuần. Bất cứ ai có bất kỳ ý tưởng về cách tôi có thể ngăn chặn các nút của tôi từ ẩn bàn phím mềm trên Android?Ngăn các nút từ ẩn bàn phím mềm trên Android
Trả lời
Giải pháp cho vấn đề của bạn có thể là giữ cho bàn phím luôn được hiển thị và cho phép người dùng đóng bàn phím khi thực hiện các tác vụ.
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput (InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
Hãy thử mã này trong phương thức onCreate() của Hoạt động của bạn. Lưu ý rằng nếu người dùng nhấn nút đóng trên bàn phím hoặc nút quay lại, nó sẽ đóng nó lại. Và tôi đoán bạn không nên can thiệp vào kịch bản đó. Và khi các hành động được thực hiện, bạn có thể đóng bàn phím từ mã.
Tôi đang ở chính xác cùng một chiếc thuyền, vì vậy nếu bạn đã từng tìm thấy một giải pháp lý tưởng, tôi rất muốn nghe nó.
EDIT: Thành công! Hay tốt hơn nhiều so với trước đây. Tôi đã xóa giải pháp cũ của mình, vì giải pháp này tốt hơn.
Như đã nêu trong https://stackoverflow.com/a/10536033/513038, nó chỉ ra rằng loadData() ẩn bàn phím. Tuy nhiên, tôi phát hiện ra rằng trong hideSoftKeyboard() của WebView, nó kiểm tra InputMethodManager để xem liệu webview có đang hoạt động hay không, thông qua imm.isActive (mWebView).
Vì vậy, nếu bạn chuyển tiêu điểm thành EditText trước loadData() và chuyển trở lại WebView ngay sau đó, bàn phím sẽ bao quanh! Nó nhanh chóng chuyển sang trường hợp trên, tôi nghĩ về việc quay trở lại tập trung vào webview, (thực sự, điều này không phải lúc nào cũng xảy ra; nó phụ thuộc) nhưng nó ít đáng chú ý hơn bàn phím nhấp nháy và quay lại.
Ý chính của những gì cần phải xảy ra như sau.
Mở rộng WebView. Cho nó một trường EditText:
public EditText mFocusDistraction;
Trong constructor, có những dòng sau:
mFocusDistraction = new EditText(context);
addView(mFocusDistraction);
Sau đó ghi đè loadUrl():
public void loadUrl(String s) {
mFocusDistraction.requestFocus();
super.loadUrl(s);
this.requestFocus();
}
Điều đó sẽ giúp cho nó hoạt động, về cơ bản. Đó là một lỗi bit, mặc dù, vì vậy đây là một lớp học hoàn chỉnh hơn:
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;
import android.widget.EditText;
public class WebViewMod extends WebView {
public EditText mFocusDistraction;
public Context mContext;
public WebViewMod(Context context) {
super(context);
init(context);
}
public WebViewMod(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public WebViewMod(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
public WebViewMod(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
super(context, attrs, defStyle, privateBrowsing);
init(context);
}
public void init(Context context) {
// This lets the layout editor display the view.
if (isInEditMode()) return;
mContext = context;
mFocusDistraction = new EditText(context);
mFocusDistraction.setBackgroundResource(android.R.color.transparent);
this.addView(mFocusDistraction);
mFocusDistraction.getLayoutParams().width = 1;
mFocusDistraction.getLayoutParams().height = 1;
}
@Override
public void loadUrl(final String url) {
if (mContext instanceof Activity && this.isFocused()) {
((Activity)mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
mFocusDistraction.requestFocus();
WebViewMod.super.loadUrl(url);
WebViewMod.this.requestFocus();
}
});
} else {
super.loadUrl(url);
}
}
}
Xamarin Android (Alternative):
InputMethodManager inputManager = (InputMethodManager)GetSystemService(Context.InputMethodService);
inputManager.ToggleSoftInput (ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);
- 1. Ẩn bàn phím mềm trên phím tắt được thực hiện trong Android?
- 2. Ẩn nút micrô Bàn phím ảo Android
- 3. Ẩn bàn phím mềm không hoạt động
- 4. Ngăn không cho bàn phím mềm bị loại
- 5. Ẩn bản xem trước phím trên bàn phím Android
- 6. Bàn phím mềm Android tùy chỉnh "Xong" nút văn bản?
- 7. Tại sao bàn phím mềm bị ẩn khi tiếp tục?
- 8. Ẩn bàn phím mềm trong ứng dụng Android từ các phân đoạn ViewPager
- 9. Bàn phím mềm Android không hoạt động
- 10. Mở bàn phím mềm khi nhấn phím
- 11. Ẩn bàn phím nhập mềm khi hộp thoại đóng
- 12. phát hiện bàn phím iPad Ẩn nút
- 13. Bàn phím Android mềm: Nút tiếp theo không "tabbing" giữa các đầu vào số HTML5
- 14. Cách giữ các nút tích cực/phủ định DialogFragment phía trên bàn phím mềm
- 15. Làm thế nào để thay đổi màu nền của bàn phím cho bàn phím mềm Android?
- 16. Tắt Android Nhập phím bằng bàn phím mềm
- 17. Flex Prevent mềm bàn phím từ bế mạc
- 18. Cách ẩn Bàn phím mềm khi hoạt động bắt đầu
- 19. Android: EditText và Button; khi nhấp vào nút, không tập trung EditText và ẩn bàn phím mềm?
- 20. Mã phím cho Android thu nhỏ nút bàn phím ảo
- 21. Buộc Bàn phím mềm mở
- 22. Android Ẩn bàn phím khi thay đổi các đoạn
- 23. Biểu tượng tìm kiếm trên bàn phím mềm
- 24. Android - Nhận bấm phím trên bàn phím
- 25. Làm thế nào để ẩn bàn phím mềm từ bên trong một đoạn?
- 26. ẩn bàn phím mặc định khi nhấp chuột trong android
- 27. Android bàn phím mềm không panning xem web
- 28. Textfield trong WebView trong Android bị ẩn bởi bàn phím
- 29. html phonegap android: bàn phím số mềm thay vì nút đi
- 30. Android - buộc toàn màn hình bàn phím mềm
này có vấn đề mất tập trung từ một lĩnh vực đầu vào/văn bản đã chọn trước đó. 1) chọn đầu vào để nhập 2) loadUrl được gọi là 3) bàn phím vẫn còn, nhưng gõ vào nó không có gì (bạn không gõ vào cùng một đầu vào nữa –
@HaykSaakian Thật sao?Tôi không biết; những gì tôi đã làm việc cho tôi, và tôi không _think_ tôi đã phạm sai lầm khi tôi đặt nó lên đây. Tôi giả sử rằng bạn đang cố gắng nhập vào cùng một webview như đang chạy loadUrl, phải không? – Erhannis
có lẽ nó chỉ là một cửa sổ nhỏ của thời gian, và trong trường hợp của bạn, bạn không nhận thấy nó? trong trường hợp của tôi, tôi có một trang mà tôi gọi loadUrl đến nhiều lần mỗi giây (trang trò chuyện sử dụng java websockets để tiêm thông điệp bằng cách sử dụng loadUrl với javascript) –