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

por*_*der 0 android dialog android-custom-view

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

我尝试用全屏frameLayout和透明背景包装对话框视图,然后以编程方式将frame属性设置为setClickable(false)。

framelayout.setClickable(false);
Run Code Online (Sandbox Code Playgroud)

这什么也没做。它仍然关闭对话框。还有其他建议吗?先感谢您。

这是我的代码:

//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;  
}
}
Run Code Online (Sandbox Code Playgroud)

我也有另一个广播类

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个想法是,在特定的实例上不会调用此自定义对话框,无论我在应用程序中做什么,都将在每个设定的时间调用它。

我使用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);
Run Code Online (Sandbox Code Playgroud)

编辑:根据您的要求,这是布局

<?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>
Run Code Online (Sandbox Code Playgroud)

希望现在更加清楚。

Rod*_*uin 5

您可以使用对话框对象来配置它setCanceledOnTouchOutside,并将其设置为false,以禁用在单击超出其边界时被取消的对话框。

样品:

dialog.setCanceledOnTouchOutside(false); // will disable dialog outside touch
Run Code Online (Sandbox Code Playgroud)