【问题标题】:How to overlap a darker layout over current layout during content loading?如何在内容加载期间将较暗的布局与当前布局重叠?
【发布时间】:2015-02-23 16:59:27
【问题描述】:

我创建了一个包含 AsyncTask 的活动以从 Internet 获取一些数据。我在布局中添加了一个进度条,因此用户在数据加载完成之前无法与 edittext 交互。 在内容加载过程中,我会使当前布局变暗,以便用户了解它在加载过程中不活动的布局。 是否可以添加一个覆盖当前布局并包含进度条小部件的较暗布局?

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/home"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="20dp"
            android:contentDescription="@string/mylogo"
            android:src="@drawable/myapp_logo" />    

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/textMethod"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18sp"
                android:text="@string/method"
                android:textColor="@color/black" />

            <Spinner
                android:id="@+id/spinner1"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:layout_below="@id/textSpinner"
                android:textSize="18sp"
                android:inputType="text"
                android:textColor="@color/black" />
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:layout_marginTop="20dp" >

            <TextView
                android:id="@+id/textMethod2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18sp"
                android:text="@string/method2"
                android:textColor="@color/black" />

            <EditText
                android:id="@+id/editMethod2"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_below="@id/textMethod2"
                android:textSize="18sp"
                android:inputType="text"
                android:textColor="@color/black" />

            <ProgressBar
                android:id="@+id/progressBar1"
                style="?android:attr/progressBarStyleLarge"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true" />

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:layout_marginTop="20dp" >

            <TextView
                android:id="@+id/textTotal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="18sp"
                android:text="@string/total"
                android:textColor="@color/black" />

            <EditText
                android:id="@+id/editTotal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/textTotal"
                android:textSize="18sp"
                android:inputType="text"
                android:textColor="@color/black" />
        </RelativeLayout>

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"                
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"
            android:background="@drawable/yellow_button_event"
            android:onClick="send"
            android:text="@string/send" />
    </LinearLayout>
</ScrollView>

【问题讨论】:

    标签: android xml layout progress-bar overlap


    【解决方案1】:

    是的,您可以使用较暗的背景和可见性=消失的全屏视图。当您的应用正在加载时,您将更改为 visibility=true。

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/home"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:orientation="vertical" >
    
            <RelativeLayout
                  android:id="@+id/darkerView"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:background="#60000000"
                  android:visibility="gone"
            />
    
    
            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="20dp"
                android:contentDescription="@string/mylogo"
                android:src="@drawable/myapp_logo" />    
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal" >
    
                <TextView
                    android:id="@+id/textMethod"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="18sp"
                    android:text="@string/method"
                    android:textColor="@color/black" />
    
                <Spinner
                    android:id="@+id/spinner1"
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:layout_below="@id/textSpinner"
                    android:textSize="18sp"
                    android:inputType="text"
                    android:textColor="@color/black" />
            </RelativeLayout>
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                android:layout_marginTop="20dp" >
    
                <TextView
                    android:id="@+id/textMethod2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="18sp"
                    android:text="@string/method2"
                    android:textColor="@color/black" />
    
                <EditText
                    android:id="@+id/editMethod2"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/textMethod2"
                    android:textSize="18sp"
                    android:inputType="text"
                    android:textColor="@color/black" />
    
                <ProgressBar
                    android:id="@+id/progressBar1"
                    style="?android:attr/progressBarStyleLarge"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true" />
    
            </RelativeLayout>
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                android:layout_marginTop="20dp" >
    
                <TextView
                    android:id="@+id/textTotal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="18sp"
                    android:text="@string/total"
                    android:textColor="@color/black" />
    
                <EditText
                    android:id="@+id/editTotal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/textTotal"
                    android:textSize="18sp"
                    android:inputType="text"
                    android:textColor="@color/black" />
            </RelativeLayout>
    
            <Button
                android:id="@+id/button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"                
                android:layout_marginTop="20dp"
                android:layout_marginBottom="20dp"
                android:background="@drawable/yellow_button_event"
                android:onClick="send"
                android:text="@string/send" />
        </LinearLayout>
    </ScrollView>
    

    希望对你有帮助!!

    【讨论】:

      【解决方案2】:

      很确定 android.app.ProgressDialog 正是为此而设计的。我主要使用不确定模式(不显示进度,只是微调器),但设置起来并不复杂。

          ProgressDialog mProgressDialog = new ProgressDialog(context);
          mProgressDialog.setMessage(message);
          mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
          mProgressDialog.setCancelable(false);
      

      然后从你的异步任务中,你可以

      @Override
      protected void onProgressUpdate(Integer... values) {
          //maintain a reference to your activity
          ((MyActivity)activity).updateProgressDialog(value);
      }
      

      updateProgressDialog(int value) 在所说的 MyActivity 中的位置。类似的东西

      public void updateProgressDialog(int value){
          if (mProgressDialog!=null && mProgressDialog.isShowing()){
              mProgressDialog.setProgress(value);
          }
      }
      

      编辑: 如果您决定不使用 ProgressDialog,那么 Alejandro 的方法是有效的。使用具有一些透明背景的视图,并根据需要显示和隐藏。您需要将 clickable 设置为 true 以捕获点击,从而防止点击。

          <ImageView
          android:id="@+id/overlay"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:src="@color/some_kinda_dark_transparent_color"
          android:visibility="gone" 
          android:clickable="true"/>
      

      【讨论】:

      • 我没有使用 ProgressDialog,我正在使用 ProgressBar...如何达到相同的结果?
      • 我猜是亚历杭德罗的做法。添加具有透明 src 或背景的视图,并根据需要显示和隐藏它。您需要将其设置为可点击,以便它捕获点击并防止点击。它并不优雅,但它应该可以工作。 ' '
      猜你喜欢
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2013-11-23
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多