Android: как создать модальный оверлей "Wheel"? - PullRequest
7 голосов
/ 09 марта 2010

Я хотел бы показать наложение модального прогресса "колесо" на мой взгляд.

ProgressDialog подходит близко, но я не хочу фон диалога или границы.

Я попытался установить фон для рисования в диалоговом окне:

this.progressDialog = new ProgressDialog(Main.this);

this.progressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
this.progressDialog.setCancelable(false);
this.progressDialog.setIndeterminate(true);

this.progressDialog.show();

но безрезультатно (т. Е. По-прежнему выглядит так же, как и без ... setBackgroundDrawable code).

Ответы [ 4 ]

12 голосов
/ 09 марта 2010

Не уверен, что есть лучший способ, но вы можете получить вращающееся колесо самостоятельно, используя ProgressBar и задав его как взаимозависимый. Если вы используете AbsoluteLayout , вы можете поместить его поверх других представлений. Этот макет должен демонстрировать этот метод с XML:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout android:id="@+id/AbsoluteLayout"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ProgressBar android:id="@+id/ProgressBar"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:indeterminate="true" android:indeterminateOnly="true"
        android:isScrollContainer="true" android:layout_x="100dip"
        android:layout_y="10dip" android:soundEffectsEnabled="true"></ProgressBar>
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:text="@string/hello"
        android:layout_gravity="center_horizontal" android:gravity="center_horizontal"
        android:layout_y="25dip" />
</AbsoluteLayout>
10 голосов
/ 24 июня 2013

Чтобы создать полноэкранный прогресс на затемненном фоне, я использую FrameLayout и устанавливаю видимость RelativeLayout на VISIBLE, когда требуется, или GONE, когда длинная операция выполнена:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ScrollView 
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

        <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:orientation="vertical"
        android:padding="3dip" >

            <!-- Your regular UI here -->

    </LinearLayout>
   </ScrollView>

   <RelativeLayout
       android:id="@+id/relativelayout_progress"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:visibility="gone"
       android:background="#aa000022" >

       <ProgressBar 
           android:layout_centerInParent="true"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:indeterminateOnly="true" />

    </RelativeLayout>
</FrameLayout>
3 голосов
/ 25 марта 2011

Решение Кларта сработало для меня, спасибо!

В моем случае я использовал layout_gravity для размещения по центру индикатора progress_indicator вместо использования явных координат.

    <ProgressBar android:id="@+id/pb"
        android:layout_width="40dp" 
        android:layout_height="40dp"
        android:indeterminate="true" 
        android:indeterminateOnly="true"
        android:isScrollContainer="true" 
        android:layout_gravity="center_vertical|center_horizontal"
        android:soundEffectsEnabled="false"
        />
1 голос
/ 09 марта 2010

Вы уже просмотрели этот учебник ? В конце страницы рассказывается о том, как создать настраиваемое диалоговое окно, и это может помочь вам создать диалоговое окно с прогрессом вращающегося элемента с собственным фоном.

...