1

ログインページを開発し、ロード画面用のカスタムxmlレイアウトを作成しました。ロード画面のレイアウトのすべてが。内に含まれていRelativeLayoutます。ユーザーがサインインボタンを押すと、ロード画面が現在のレイアウトの上に配置され、ロード中であることが示されます。

問題

問題は、ロード画面がログインレイアウトの上にある場合でも、その背後にあるボタンのロード画面をクリックできるため、不要な複数のアクションが作成されることです。RelativeLayout全体をクリックできないようにする簡単な方法はありますか?

私は次のようなことを試しました:

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

成功しませんでした。

4

2 に答える 2

3

ロード画面の背景をclickable="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 に答える