我想实现以下设计:以编程方式创建的自定义布局对话框。它将包含EditText和Button。我想在对话框出现时弹出软键盘,我希望对话框水平填充屏幕并放在键盘正上方。
以下是我现在所做的事情:
final AlertDialog obsDialog = new AlertDialog.Builder(ProdutoDetalheActivity.this).create();
final View obsLayout = View.inflate(getApplicationContext(), R.layout.observation_layout, null);
Button obsButton = (Button) obsLayout.findViewById(R.id.observation_button);
obsEdit = (EditText) obsLayout.findViewById(R.id.observation_edit);
obsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
text.setText(String.valueOf(obsEdit.getText()));
obsDialog.dismiss();
}
});
obsDialog.setView(obsLayout);
obsDialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
obsDialog.show();
obsEdit.requestFocus();
但这不会使对话框变宽,也不会调用软键盘。我仍然想知道如何将对话框与键盘对齐。
提前感谢您的帮助!
[编辑]我使用以下代码启动了键盘:
obsDialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
obsDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
[编辑]下面是我想要实现的设计的打印屏幕:
答案 0 :(得分:1)
据我所知,如果你不想要默认的尺寸/位置,你必须调整代码中的对话框大小/位置。
在具体情况下,您可以在AndroidManifest.xml中为活动的windowSoftInputMode声明adjustResize。
之后,您可以在底部设置对话框重力,并在对话框片段的onStart中设置宽度:
...
getDialog().getWindow().setLayout(mWidth, mHeight);
WindowManager.LayoutParams lp = getDialog().getWindow().getAttributes();
lp.gravity = Gravity.BOTTOM;
lp.x = 0; lp.y = 0;
getDialog().getWindow().setAttributes(lp);
...
mWidth和mHeight在onCreate中初始化,但我认为你也可以在onStart中完成。为了获得宽度,我使用下面的代码:
Point size = new Point();
WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
display.getSize(size);
mWidth = size.x;
希望这可以满足您的要求。我用它来创建一个类似的对话框,但我没有在对话框中编辑。我需要它在屏幕的底部。