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">
我解决了我的问题。所以,为了解决问题,需要删除所有底部绑定。
我在 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">
我解决了我的问题。所以,为了解决问题,需要删除所有底部绑定。