android实现弹出输入法时,顶部固定,中间部分上移的效果,使用 Dialog 制作紧贴输入法顶部的输入框...
时间: 2024-02-26 16:57:57 浏览: 162
要实现这个效果,可以通过自定义一个 Dialog,将其设置为无标题,设置宽度为屏幕宽度,高度为输入法高度,让其紧贴输入法顶部。代码如下:
```java
public class InputDialog extends Dialog {
private View mContentView;
private int mInputHeight;
public InputDialog(Context context) {
super(context, R.style.InputDialogTheme);
init(context);
}
private void init(Context context) {
// 获取输入法高度
mInputHeight = getInputMethodHeight(context);
// 设置无标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 设置宽度为屏幕宽度
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height = mInputHeight;
getWindow().setAttributes(layoutParams);
// 设置布局
mContentView = LayoutInflater.from(context).inflate(R.layout.dialog_input, null);
setContentView(mContentView);
}
public void show(View view) {
// 显示Dialog
super.show();
// 让Dialog紧贴输入法顶部
Window window = getWindow();
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.y = -mInputHeight;
window.setAttributes(layoutParams);
// 设置输入框获取焦点
EditText editText = mContentView.findViewById(R.id.edit_text);
editText.requestFocus();
}
private int getInputMethodHeight(Context context) {
int height = 0;
Rect rect = new Rect();
View decorView = getWindow().getDecorView();
decorView.getWindowVisibleDisplayFrame(rect);
int screenHeight = decorView.getRootView().getHeight();
if (screenHeight - rect.bottom > 0) {
height = screenHeight - rect.bottom;
}
return height;
}
}
```
其中,`dialog_input` 是输入框布局,可以根据需要自行修改。在 Activity 中,当需要弹出输入框时,可以这样使用:
```java
InputDialog dialog = new InputDialog(this);
dialog.show(getWindow().getDecorView());
```
`getWindow().getDecorView()` 可以获取当前 Activity 的根布局,这样就可以让 Dialog 紧贴输入法顶部了。
阅读全文