Tôi thêm chế độ xem bởi WindowManager phía trên bàn phím mềm với TYPE_APPLICATION_PANEL, nhưng nó không hoạt động trên một số điện thoại, không phải TYPE_SYSTEM_ALERT. Tôi nên làm gì để làm cho nó xảy ra trên tất cả các điện thoại?Làm cách nào để đảm bảo cửa sổ luôn hiển thị trên bàn phím mềm?
Trả lời
Có, điều này có thể được thực hiện bằng cách sử dụng PopupWindow trên bàn phím mềm.
Bạn có thể kiểm tra thư viện this hoặc thư viện this, nơi họ đã triển khai chính xác những gì bạn đang tìm kiếm.
Họ đã thêm chế độ xem tùy chỉnh trên bàn phím. Bạn có thể chỉ cần làm theo mẫu triển khai của họ và thêm chế độ xem của bạn một cách dễ dàng. tôi vẫn muốn nhấn mạnh một số mã quan trọng,
Ban đầu xác định chiều cao bàn phím,
// Defining default height of keyboard which is equal to 230 dip
final float popUpheight = getResources().getDimension(
R.dimen.keyboard_height);
changeKeyboardHeight((int) popUpheight);
Phương pháp này được sử dụng để kiểm tra tự động chiều cao bàn phím và tầm nhìn của nó,
/**
* Checking keyboard height and keyboard visibility
*/
int previousHeightDiffrence = 0;
private void checkKeyboardHeight(final View parentLayout) {
parentLayout.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
parentLayout.getWindowVisibleDisplayFrame(r);
int screenHeight = parentLayout.getRootView()
.getHeight();
int heightDifference = screenHeight - (r.bottom);
if (previousHeightDiffrence - heightDifference > 50) {
popupWindow.dismiss();
}
previousHeightDiffrence = heightDifference;
if (heightDifference > 100) {
isKeyBoardVisible = true;
changeKeyboardHeight(heightDifference);
} else {
isKeyBoardVisible = false;
}
}
});
}
Và phương pháp này thay đổi chiều cao bàn phím biểu tượng cảm xúc dựa trên chiều cao bàn phím thực tế,
/**
* change height of emoticons keyboard according to height of actual
* keyboard
*
* @param height
* minimum height by which we can make sure actual keyboard is
* open or not
*/
private void changeKeyboardHeight(int height) {
if (height > 100) {
keyboardHeight = height;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, keyboardHeight);
emoticonsCover.setLayoutParams(params);
}
}
Tôi đã làm theo cách tiếp cận này và đã có chính xác những gì tôi muốn. Tôi chắc chắn bạn sẽ có thể triển khai điều này tùy thuộc vào yêu cầu của ứng dụng của bạn.
Hy vọng điều đó sẽ hữu ích.
Câu trả lời có giúp ích cho bạn không? Hay bạn cần nhiều gan hơn? –
Tôi sẽ thử sau. – handrenliang
Aritra, Rất tiếc vì đã chấp nhận câu trả lời của bạn gần đây. – handrenliang
TYPE_SYSTEM_ALERT
cửa sổ không hoạt động trên một số thiết bị, nhưng nếu chúng hoạt động, chúng sẽ được đặt phía trên cửa sổ IME. Tôi khuyên bạn nên thử các cửa sổ TYPE_TOAST
. Bánh mì nướng hoạt động trên tất cả các thiết bị và được hiển thị trên bàn phím. Nhưng trên một số phiên bản Android như 4.1 bánh mì nướng không chấp nhận đầu vào của người dùng như chạm hoặc sự kiện quan trọng.
TYPE_PHONE
cũng có thể là một ứng cử viên tốt để giải quyết vấn đề của bạn nhưng tôi nghĩ rằng nó sẽ không hoạt động trên các thiết bị mà TYPE_SYSTEM_ALERT
không hoạt động.
CẬP NHẬT: Một điều bạn có thể thử là thêm WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
vào WindowManager.LayoutParams.flags
. Lá cờ này yêu cầu Android định vị một cửa sổ để nó có thể bao gồm IME. Trong trường hợp này, bạn phải bỏ đặt cờ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
. Trong cấu hình này, cửa sổ sẽ được lấy nét và phải được đặt ở phía trước IME.
Một tùy chọn khác là chỉ cần đặt cờ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
và gắn cờ WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
. Nó cũng sẽ làm cho cửa sổ của bạn được đặt trước IME nhưng cửa sổ sẽ không thể lấy nét được.
- 1. Giữ bàn phím luôn ở trên cùng và hiển thị
- 2. Android: Cách làm cho bàn phím luôn hiển thị?
- 3. Làm thế nào bạn có thể đảm bảo cửa sổ bật lên cửa sổ bật lên twitter được hiển thị?
- 4. Làm cách nào để đảm bảo hiển thị chế độ xem cụ thể khi bàn phím xuất hiện?
- 5. Hiển thị bàn phím phần mềm mà không có EditText
- 6. Đảm bảo hiển thị
- 7. Hiển thị bố cục khi bàn phím mềm mở ra
- 8. Làm thế nào để hiển thị Bàn Phím Mềm từ một Dịch Vụ?
- 9. Làm cách nào để buộc bàn phím hiển thị/ẩn?
- 10. Làm thế nào để hiển thị bàn phím mềm hoàn hảo trong phân đoạn trong Android?
- 11. Cách vô hiệu hiển thị "gợi ý" trên Bàn phím mềm
- 12. Cách lấy nét và hiển thị bàn phím mềm khi EditText được hiển thị trên thanh hành động?
- 13. Làm cách nào để hiển thị bàn phím cho hộp văn bản?
- 14. LUÔN LUÔN trên cửa sổ trên cùng
- 15. Làm thế nào để ẩn bàn phím trên hộp thoại hiển thị?
- 16. Cách hiển thị bàn phím cho UIView
- 17. Nút để hiển thị bàn phím ảo?
- 18. Cách đặt 'luôn luôn-dưới-dưới'-cửa sổ
- 19. setImeOptions: tại sao nút "Xong" không hiển thị trên bàn phím mềm?
- 20. Chỉ cần số bàn phím mềm?
- 21. Làm cách nào để hiển thị bàn phím số trên EditText trong Android?
- 22. Cách hiển thị bàn phím số
- 23. Mở bàn phím mềm khi nhấn phím
- 24. cách hiển thị bàn phím số
- 25. cách đảm bảo rằng JDialog luôn ở trên đầu trang
- 26. Kiểm tra xem bàn phím mềm có hiển thị bằng cách sử dụng espresso
- 27. 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?
- 28. đảm bảo tiêu đề hiển thị đầy đủ trên JOptionPane
- 29. Làm thế nào tôi có thể thực hiện một nút highlighten trên cửa sổ bật lên cửa sổ trên Mac bằng cách sử dụng bàn phím
- 30. Android - Bàn phím không xuất hiện trong cửa sổ
Bạn có nghĩa là "vượt quá" hoặc "ở trên" (hoặc trên đầu bàn phím mềm) không? –
trên đầu bàn phím mềm. – handrenliang