全宽对话框,位于软键盘正上方

时间:2014-09-23 13:54:19

标签: android android-layout android-alertdialog

我想实现以下设计:以编程方式创建的自定义布局对话框。它将包含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();

但这不会使对话框变宽,也不会调用软键盘。我仍然想知道如何将对话框与键盘对齐。

我已经尝试these answers但没有成功。

提前感谢您的帮助!

[编辑]我使用以下代码启动了键盘:

obsDialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
obsDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

[编辑]下面是我想要实现的设计的打印屏幕: Image 1

1 个答案:

答案 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;

希望这可以满足您的要求。我用它来创建一个类似的对话框,但我没有在对话框中编辑。我需要它在屏幕的底部。