Tôi đã có một DialogFragment, thường nằm ở giữa màn hình, tôi đang cố di chuyển ra khỏi bàn phím trên màn hình, nếu có, vì nó không phải là trải nghiệm UX tốt cho bàn phím để che phủ trên các phần của cửa sổ khi hoàn toàn không sử dụng màn hình bất động sản xa hơn.Animate Window Layout Thay đổi
Giả sử tôi đã giải quyết được vấn đề phát hiện bàn phím xuất hiện hoặc biến mất, ví dụ: How to check visibility of software keyboard in Android?.
Hiện nay tôi đi đến di chuyển cửa sổ ra khỏi đường đi bằng cách làm một cái gì đó như thế này:
...
final WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
params.gravity = Gravity.TOP;
params.verticalMargin = .1f; //or whatever
dialog.getWindow().setAttributes(params);
...
này hoạt động tốt, nhưng cửa sổ đột nhiên giật vào đúng vị trí, mà không phải là một trải nghiệm UX dễ chịu. Cửa sổ được đề cập có hoạt ảnh nhập cảnh và thoát thành công - và chúng thậm chí còn hoạt động phù hợp sau khi thay đổi bố cục cửa sổ. Làm thế nào tôi có thể làm sống động thêm cửa sổ giữa các thay đổi WindowManager.LayoutParams?
(Tôi muốn nếu có thể tiếp tục làm việc theo cách bố trí {/}} {trong} http://developer.android.com/reference/android/view/Window.html thay vì, giả sử, buộc DialogFragment vào bố cục hoạt động của tôi và làm động nó từ bên trong).
Trong AndroidManifest của bạn, bạn đã thử thêm 'android: windowSoftInputMode =" stateHidden | adjustPan "' vào thẻ hoạt động của bạn? Điều đó có thể giữ cho chế độ xem đang hoạt động được hiển thị tự động. Tôi có xu hướng sử dụng điều này cho các tính năng khác, nhưng chưa thử với DialogFragment. – Anonsage
Tôi đã thử điều đó trước đây, và tôi đã thử lại lần nữa để đảm bảo. Nó dường như chỉ ảnh hưởng đến chế độ xem Gốc hoạt động (DecorView), không phải bất kỳ Windows nào khác và quan điểm của chúng. Tôi thấy các hoạt động điều chỉnh cho bàn phím (và không có hoạt hình quá, tâm trí bạn) trong nền, nhưng cửa sổ chỉ nổi ở đó không thay đổi. Ngoài ra, trong trường hợp ai đó khác bị cám dỗ đề xuất nó, vâng tôi cũng đã thử "window.setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);" trong DialogFragment. – jdowdell
@jdowdell Sử dụng 'DialogFragment' để thay thế. –