Android 键盘在 Dialog 中调出 textview 如何修复

Android keyboard brings up textview in Dialog how to fix it

我在 android 工作室 (java) 中使用键盘和对话框时遇到问题。如果我使用 edittext,键盘会自下而上调出 texviews。我尝试在清单和对话框 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) 中使用 WindowSoftInput。我该如何解决这个问题?

感谢您的帮助。

w/o keyboard

with keyboard

问题 TextView 的名称为 tvTemp。

<EditText
    android:id="@+id/etWriteTempR1"
    android:layout_width="100dp"
    android:layout_height="65dp"
    android:layout_marginStart="128dp"
    android:layout_marginTop="110dp"
    android:ems="2"
    android:hint="00"
    android:inputType="number"
    android:textAlignment="center"
    android:textSize="40dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/btnOnOfVent_R1" />

<ImageButton
    android:id="@+id/btnOnOff_R1"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_marginStart="52dp"
    android:layout_marginTop="144dp"
    android:background="#00FFFFFF"
    android:scaleType="fitCenter"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/on" />

<ImageButton
    android:id="@+id/btnOnOfVent_R1"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_marginStart="52dp"
    android:layout_marginTop="144dp"
    android:background="#00FFFFFF"
    android:scaleType="fitCenter"
    app:layout_constraintStart_toEndOf="@id/btnOnOff_R1"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/on" />

<ImageButton
    android:id="@+id/btnOnOffKlimat_R1"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_marginStart="52dp"
    android:layout_marginTop="144dp"
    android:background="#00FFFFFF"
    android:scaleType="fitCenter"
    app:layout_constraintStart_toEndOf="@id/btnOnOfVent_R1"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/on" />

<TextView
    android:id="@+id/tvDialogR1"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:layout_marginTop="16dp"
    android:text="TextView"
    android:textAlignment="center"
    android:textSize="25sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/btnClose" />

<Button
    android:id="@+id/btnClose"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="272dp"
    android:background="#00FFFFFF"
    android:text="X"
    android:textAlignment="center"
    android:textColor="#000000"
    android:textSize="20dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/tvTemp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="80dp"
    android:layout_marginBottom="16dp"
    android:text="00"
    android:textAlignment="center"
    android:textSize="175sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

对话框代码。

    private void DialogR1() {
    dialogRoom1 = new Dialog(this);
   // dialogRoom1.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialogRoom1.setContentView(R.layout.activity_room);
    dialogRoom1.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));

    //ImageView dialogpictures = (ImageView) dialogRoom1.findViewById(R.id.prewimg);
    //dialogpictures.setImageResource(R.drawable.letter_bukvi);
    WindowManager.LayoutParams lp = dialogRoom1.getWindow().getAttributes();
    lp.width = MATCH_PARENT;
    lp.height = MATCH_PARENT;
    dialogRoom1.getWindow().setAttributes(lp);
    TextView tvDialogR1 = (TextView) dialogRoom1.findViewById(R.id.tvDialogR1);
    tvDialogR1.setText("Room 1");
    dialogRoom1.setCancelable(false);
    TextView tvTemp = dialogRoom1.findViewById(R.id.tvTemp);
    tvTemp.setText(temp1);
    TextView btnclose = (TextView) dialogRoom1.findViewById(R.id.btnClose);
    btnclose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialogRoom1.dismiss();
        }
    });
    EditText etWriteTempR1 = dialogRoom1.findViewById(R.id.etWriteTempR1);
    etWriteTempR1.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int i, KeyEvent keyEvent) {
            if(keyEvent.getAction() == KeyEvent.ACTION_DOWN &&
                    (i == KeyEvent.KEYCODE_ENTER))
            {
                Log.e("SendText", "temp1 " + etWriteTempR1.getText().toString() + ";");
                connectedThread.write("temp1 " + etWriteTempR1.getText().toString() + ";");
                etWriteTempR1.setText("");
                return true;
            }
            return false;
        }
    });
    dialogRoom1.show();
}

您应该为您的 EditText 添加底部约束,例如:

app:layout_constraintBottom_toTopOf="@+id/tvTemp" />

您可能还需要在清单中设置以下内容

android:windowSoftInputMode="adjustNothing">

我解决了我的问题。所以,为了解决问题,需要删除所有底部绑定。