1

我开发了一个登录页面,并为加载屏幕创建了一个自定义 xml 布局。加载屏幕布局中的所有内容都包含在RelativeLayout. 当用户点击登录按钮时,加载屏幕被放置在当前布局的顶部,表明它正在加载。

问题

问题是,当加载屏幕位于登录布局的顶部时,您仍然可以单击其后面按钮上的加载屏幕,从而创建多个我不想要的操作。有没有一种简单的方法可以使整个RelativeLayout不可点击?

我已经尝试过诸如:

android:clickable="false"
android:focusable="false"

没有成功。

4

2 回答 2

3

您可以使加载屏幕的背景可点击=“true”并为其分配任何操作,以防止点击通过它

于 2012-09-20T17:04:24.130 回答
1

我遇到过这样的情况,我发现最简单的解决方案是让你的加载对话框占据所有的屏幕空间。对话框的主容器应该是透明的,实际加载对话框位于其中。这是我所做的一个例子。

我的加载对话框布局:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/stericson.busybox.donate"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#AA000000"
    android:id="@+id/main">

    <RelativeLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/roundedborder_black_translucent"
        android:layout_centerInParent="true"
        android:padding="10dip">

        <ProgressBar 
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_centerVertical="true"
            android:id="@+id/progress"
            android:layout_marginRight="10dp"/>

        <stericson.busybox.donate.custom.FontableTextView 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@id/progress"
            android:textColor="#ffffff"
            android:id="@+id/header"/>

        </RelativeLayout>          
    </RelativeLayout>

可绘制对象:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="2dp" android:color="#909090" /> 
    <solid android:color="#CC000000" /> 
    <padding android:left="7dp" android:top="7dp" 
        android:right="7dp" android:bottom="7dp" /> 
    <corners android:radius="6dp" /> 
</shape> 

显示它的代码:

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View layout = inflater.inflate(R.layout.popupwindow_spinner, null); 
        App.getInstance().setPopupView(layout);

        popupWindow = new PopupWindow(layout, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

        context.findViewById(R.id.main).post(new Runnable() {
   public void run() {
       try
       {
           popupWindow.showAtLocation(context.findViewById(R.id.main), Gravity.CENTER, 0, 250);
       }
       catch (Exception e)
       {
           //do nothing
       }
   }
    });

        TextView textView = (TextView) layout.findViewById(R.id.header);
        textView.setText(context.getString(stringId));

id main 只是我的主视图的父容器:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/stericson.busybox.donate"
    android:id="@+id/main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#303030" >

我相信您需要让您的应用程序使用半透明主题才能使用透明背景,就像我在这里所做的那样:

<activity android:theme="@android:style/Theme.Translucent"> 

由于加载屏幕填满了整个屏幕,因此不允许点击进入其下方的内容。

于 2012-09-20T17:13:35.950 回答