我已在Android中实现了以下对话,但遇到了一些问题,我无法弄清楚为什么会这样。
Dialog
而非 AlertDialog
,因此当我触摸屏幕上的其他位置时,此消息会消失。我想阻止这种情况发生,并希望仅在用户选择这两个选项中的任何一个时才关闭消息框。以下是XML
custom_alert.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:background="@drawable/custom_alert_layout"
android:id="@+id/alert_layout"
android:paddingBottom="15dp"
android:paddingTop="10dp"
android:layout_height="wrap_content">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:id="@+id/alert_icon_imageview"
android:src="@drawable/alerticon"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/alert_msg"
android:layout_alignStart="@+id/alert_msg" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/alert_title"
android:text="TITLE"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="#0a4d4a"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/alert_icon_imageview"
android:layout_toEndOf="@+id/alert_icon_imageview"
android:layout_marginLeft="20dp" />
<ImageView
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="10dp"
android:layout_marginRight="4dp"
android:layout_marginLeft="2dp"
android:id="@+id/alert_divider_imageview"
android:layout_below="@+id/alert_title"
android:src="@drawable/alertdivider"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/alert_msg"
android:text="MESSAGE"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:textSize="16sp"
android:layout_below="@+id/alert_divider_imageview"
android:textColor="#ff373334"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginRight="4dp"
android:layout_marginLeft="2dp"
android:layout_marginTop="10dp"
android:id="@+id/alert_divider_imageview2"
android:layout_below="@+id/alert_msg"
android:src="@drawable/alertdivider"/>
<Button
android:layout_width="150dp"
android:id="@+id/alert_cancel"
android:layout_marginLeft="10dp"
android:layout_marginRight="5dp"
android:layout_marginTop="15dp"
android:textColor="#ffffff"
android:textStyle="bold"
android:text="CANCEL"
android:background="@drawable/custom_alert_cancel"
android:layout_height="wrap_content"
android:layout_below="@+id/alert_divider_imageview2"
/>
<Button
android:layout_width="150dp"
android:id="@+id/alert_ok"
android:text="ERASE"
android:textStyle="bold"
android:layout_marginRight="10dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="15dp"
android:textColor="#ffffff"
android:background="@drawable/custom_alert_ok"
android:layout_toRightOf="@+id/alert_cancel"
android:layout_height="wrap_content"
android:layout_below="@+id/alert_divider_imageview2" />
</RelativeLayout>
custom_alert_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" >
<shape android:shape="rectangle">
<corners android:radius="10dp"/>
<solid android:color="#139977" />
<stroke android:width="2dp" android:color="#0a4d4a" />
</shape>
</item>
</selector>
答案 0 :(得分:1)
你可以发布你的活动代码吗?
在您的活动中尝试此操作:
final Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.alert_dialog);
Button okBtn = (Button) dialog.findViewById(R.id.ok_btn);
Button cancelBtn = (Button) dialog.findViewById(R.id.cancel_btn);
okBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
doErase();
}
});
cancelBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setCancelable(false);
dialog.show();
答案 1 :(得分:0)
解决第3个问题,从xml中删除按钮并使用对话框的内置按钮。 setPositiveButton()
类的setNegativeButton()
和dialog
等方法。
它会给你相同大小的按钮。
答案 2 :(得分:0)
解决你可以在xml中使用的第一个问题,如
<item name="android:background">@android:color/transparent</item>
或在java
中dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
答案 3 :(得分:0)
只需在对话框中添加一行,即删除对话框的操作栏和标题栏:
Dialog dialog = new Dialog(MainActivity.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //add this line
dialog.setContentView(R.layout.activity_main);
答案 4 :(得分:0)
解决您的第一个问题在setContentView
Window window = actDialog.getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();
window.setAttributes(wlp);
window.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
actDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
你的第二个问题解决方案
actDialog.setCanceledOnTouchOutside(false);
你的第三个问题解决方案
将您的两个Button
放入LinearLayout
并提供layout_weight
相同的
答案 5 :(得分:0)
1.删除顶部的空白区域: 将这两行添加到对话框中,
dialog.getWindow();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.alert_dialog);
删除底部的空白区域,在您的代码中只删除以下行
<corners android:radius="10dp"/>
来自custom_alert_layout.xml文件的。
2.要解决第二个问题:在代码中添加以下两行
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
3.为了获得相同的按钮宽度,使用LinearLayout作为两个按钮的父级,并为按钮赋予相同的权重。
答案 6 :(得分:0)
第3个问题 这是代码
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<Button
android:layout_width="match_parent"
android:id="@+id/alert_cancel"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:layout_marginRight="5dp"
android:layout_marginTop="15dp"
android:textColor="#ffffff"
android:textStyle="bold"
android:text="CANCEL"
android:background="@drawable/custom_alert_cancel"
android:layout_height="wrap_content"
/>
<Button
android:layout_width="match_parent"
android:id="@+id/alert_ok"
android:text="ERASE"
android:textStyle="bold"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="15dp"
android:textColor="#ffffff"
android:background="@drawable/custom_alert_ok"
android:layout_height="wrap_content"
/>
</LinearLayout>