使RelativeLayout不可选

时间:2012-09-20 16:46:45

标签: android android-layout relativelayout android-xml

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

问题

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

我尝试过这样的事情:

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

没有成功。

2 个答案:

答案 0 :(得分:3)

您可以将加载屏幕的背景设为clickable =“true”并为其指定不执行任何操作,以防止点击次数通过

答案 1 :(得分: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>

drawable:

<?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"> 

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