【发布时间】:2020-09-21 23:21:01
【问题描述】:
我使用自定义布局在自定义位置显示 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, boolean isChecked) {
SharedPreferences.Editor editor = getApplicationContext().getSharedPreferences("App_Resources", MODE_PRIVATE).edit();
editor.putBoolean("ObsLidar", isChecked);
editor.apply();
obstacleDetection.lidarDetectioin(isChecked);
}
});
sonarButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
SharedPreferences.Editor editor = getApplicationContext().getSharedPreferences("App_Resources", 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>
如果您需要更多信息,请随时询问。
谢谢
【问题讨论】:
-
尝试线性布局
-
线性布局在我的自定义对话框中。
-
@ArthTilva 你想让我删除约束布局吗?
-
@Arpit Patel ,你找到修复了吗?
-
@Rajasekhar 不,我没有找到解决方案
标签: android android-alertdialog