我从图像和其他一些视图创建了一个自定义对话框(不,这不是对话框对象)。我对这个自定义对话框(再次,这是一个布局)的冲突是它周围的区域关闭自定义对话框。有没有办法让外面区域不可点击?
我尝试用带有透明背景的全屏frameLayout包装对话框视图,然后以编程方式将frame属性设置为setClickable(false)。
framelayout.setClickable(false);
这没有任何作用。它仍然关闭对话框。还有其他建议吗?先感谢您。
这是我的代码:
//used to disable background from closing the custom dialog
private FrameLayout fl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.layout_dialog);
btnContinue = (Button) findViewById(R.id.btnContinue);
btnContinue.setOnClickListener(this);
fl.setClickable(false); //background suppose to lock
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btnContinue:
finish();
}
break;
}
}
我还有另一个用于broadcastReceiver的课程
public class DialogManagerBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(IdeaPlayInterfaceApplication.isActivityVisible()){
Intent i=new Intent(context,CustomDialogActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
这个想法是这个自定义对话框没有在特定的实例中调用,无论我在应用程序中做什么,都会在每个设定的时间内调用它。
我使用Intent和PendingIntent来重复调用此自定义对话框。有这样的事情:
cancelAlarmNotificationMonitoring(context);
Calendar calendar = Calendar.getInstance();
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent pintent = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis()+ALARM_INTERVAL,ALARM_INTERVAL, pintent);
编辑:根据您的要求,这是布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/custom_background"
android:gravity="center"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/fl1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:orientation="vertical"
android:background="@drawable/bkg_img"
android:padding="10dp" >
<ImageView
android:id="@+id/bg1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:background="@drawable/img_icon"
android:padding="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="20dp"
android:text="@string/text"
android:textColor="@color/white"
android:textSize="35sp"/>
<Button
android:id="@+id/btnContinue"
android:layout_width="80dp"
android:layout_height="60dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:background="@drawable/custom_btn"
android:clickable="true"
android:text="@string/btn_continue_no_arrow"
android:textColor="@color/white"
android:textSize="@dimen/font_size_18"
android:textStyle="bold" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
希望现在更清楚了。
答案 0 :(得分:4)
您可以使用对话框对象进行配置,并将其setCanceledOnTouchOutside
设置为false,以禁用对话框,以便在其边界外单击时取消对话。
<强>样品:强>
dialog.setCanceledOnTouchOutside(false); // will disable dialog outside touch
答案 1 :(得分:0)
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom);
dialog.setCancelable(false);
答案 2 :(得分:0)
我想出了答案。我将onClickListener设置为FrameLayout然后什么也没做。工作良好。谢谢!