如何使自定义对话框视图之外的区域无法点击?

时间:2014-08-22 21:54:29

标签: android dialog android-custom-view

我从图像和其他一些视图创建了一个自定义对话框(不,这不是对话框对象)。我对这个自定义对话框(再次,这是一个布局)的冲突是它周围的区域关闭自定义对话框。有没有办法让外面区域不可点击?

我尝试用带有透明背景的全屏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>

希望现在更清楚了。

3 个答案:

答案 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然后什么也没做。工作良好。谢谢!