如何解决AlertDIalog删除不必要的空间
我在自定义位置以自定义布局显示AlertDialog。
当我显示警报对话框时,即使自定义布局没有该空白,视图的右侧也会有更多的空白。
我遵循此link并没有太大帮助
请检查附件中的图片
这是我的 custom_obstacle_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:padding="10dp"
android:weightSum="3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatToggleButton
android:id="@+id/one"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginTop="15dp"
android:layout_marginEnd="15dp"
android:layout_marginBottom="15dp"
android:layout_weight="1"
android:background="@drawable/toggle"
android:checked="true"
android:textOff="Camera"
android:textOn="Camera" />
<androidx.appcompat.widget.AppCompatToggleButton
android:id="@+id/two"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginTop="15dp"
android:layout_marginEnd="15dp"
android:layout_marginBottom="15dp"
android:layout_weight="1"
android:background="@drawable/toggle"
android:checked="true"
android:textOff="Lidar"
android:textOn="Lidar" />
<androidx.appcompat.widget.AppCompatToggleButton
android:id="@+id/three"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginTop="15dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="15dp"
android:layout_weight="1"
android:background="@drawable/toggle"
android:checked="true"
android:textOff="Sonar"
android:textOn="Sonar" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
这是我的警报对话框
final AlertDialog.Builder obstacleDialogBuilder = new AlertDialog.Builder(this,R.style.CustomDialog);
obstacleDialogBuilder.setMessage(null);
LayoutInflater inflaterObstacle = this.getLayoutInflater();
View obstacleDialogView = inflaterObstacle.inflate(R.layout.custom_obstacle_dialog,null);
obstacleDialogBuilder.setView(obstacleDialogView);
cameraButton = (ToggleButton) obstacleDialogView.findViewById(R.id.one);
lidarButton = (ToggleButton) obstacleDialogView.findViewById(R.id.two);
sonarButton = (ToggleButton) obstacleDialogView.findViewById(R.id.three);
SharedPreferences app_resources = getApplicationContext().getSharedPreferences("App_Resources",MODE_PRIVATE);
boolean obsCamera = app_resources.getBoolean("ObsCamera",true);
boolean obsLidar = app_resources.getBoolean("ObsLidar",true);
boolean obsSonar = app_resources.getBoolean("ObsSonar",true);
cameraButton.setChecked(obsCamera);
lidarButton.setChecked(obsLidar);
sonarButton.setChecked(obsSonar);
if (obsSonar && ultrasonicStatus)
sonarButton.setBackground(ContextCompat.getDrawable(getApplicationContext(),R.drawable.red_rounded_button));
if (obsLidar && lidarStatus)
lidarButton.setBackground(ContextCompat.getDrawable(getApplicationContext(),R.drawable.red_rounded_button));
if (obsCamera && cameraStatus)
cameraButton.setBackground(ContextCompat.getDrawable(getApplicationContext(),R.drawable.red_rounded_button));
cameraButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
SharedPreferences.Editor editor = getApplicationContext().getSharedPreferences("App_Resources",MODE_PRIVATE).edit();
editor.putBoolean("ObsCamera",isChecked);
editor.apply();
obstacleDetection.cameraDetectioin(isChecked);
}
});
lidarButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,MODE_PRIVATE).edit();
editor.putBoolean("ObsLidar",isChecked);
editor.apply();
obstacleDetection.lidarDetectioin(isChecked);
}
});
sonarButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,MODE_PRIVATE).edit();
editor.putBoolean("ObsSonar",isChecked);
editor.apply();
obstacleDetection.ultrasonicDetectioin(isChecked);
}
});
obstacleAlertDialog = obstacleDialogBuilder.create();
obstacleAlertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
obstacleAlertDialog.getWindow().getAttributes().windowAnimations = R.style.SlideUpDownAnimation;
WindowManager.LayoutParams wmlp = obstacleAlertDialog.getWindow().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.RIGHT;
wmlp.x = 100; //x position
wmlp.y = 100; //y position
obstacleAlertDialog.show();
这是我正在使用的样式
<style name="CustomDialog" parent="Theme.AppCompat.Light.Dialog.Alert">>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<!-- <item name="android:windowBackground">@null</item>-->
<item name="android:windowNoTitle">true</item>
</style>
如果您需要更多信息,请随时提问。
谢谢
解决方法
我尝试过更改窗口属性的大小,但没有达到您想要的。然后,我用Theme.AppCompat.Light.Dialog.Alert
替换了您现有的样式@style/Theme.AppCompat.Dialog
。现在,我们可以控制布局了。
更改为:
<style name="CustomDialog" parent="@style/Theme.AppCompat.Dialog">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:windowNoTitle">true</item>
</style>
在您的布局文件中,我删除了多余的LinearLayout
。
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:padding="16dp">
<androidx.appcompat.widget.AppCompatToggleButton
android:id="@+id/one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:background="#43212121"
android:checked="true"
android:textOff="Camera"
android:textOn="Camera"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/two"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatToggleButton
android:id="@+id/two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#43212121"
android:checked="true"
android:textOff="Lidar"
android:textOn="Lidar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatToggleButton
android:id="@+id/three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:background="#43212121"
android:checked="true"
android:textOff="Sonar"
android:textOn="Sonar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/two"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
在您的Java代码中,我不确定是否进行了更改,因此将其粘贴。
private void showDialogHere() {
AlertDialog.Builder obstacleDialogBuilder = new AlertDialog.Builder(this,R.style.CustomDialog);
obstacleDialogBuilder.setMessage(null);
LayoutInflater inflaterObstacle = this.getLayoutInflater();
View obstacleDialogView = inflaterObstacle.inflate(R.layout.my_dialog,null);
obstacleDialogBuilder.setView(obstacleDialogView);
AlertDialog obstacleAlertDialog = obstacleDialogBuilder.create();
obstacleAlertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Window window = obstacleAlertDialog.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.TOP | Gravity.RIGHT;
params.x = 100; //x position
params.y = 100; //y position
obstacleAlertDialog.show();
}
让我知道这是否可行。
我将进一步尝试理解为什么样式不允许更改对话框大小。如果发现有用,我会发贴。
我还发现此解决方案适用于您的情况Another answer。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。