Android: Como criar um Modal Progress “Roda” Overlay?
-
18-09-2019 - |
Pergunta
Eu gostaria de mostrar um progresso modal overlay "roda" no meu ponto de vista.
O ProgressDialog chega perto, mas eu não quero que o fundo de diálogo ou de fronteira.
Eu tentei definindo o drawable da janela de diálogo de fundo:
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();
mas sem sucesso (ou seja, ainda parece o mesmo que sem a ... Código setBackgroundDrawable).
Solução
Você check-out este tutorial ? No final da página que fala sobre como criar um diálogo personalizada, e que ajuda poderio você colocar uma caixa de diálogo de progresso giratório com os seus próprios fundos.
Outras dicas
Não tenho certeza se há uma maneira melhor, mas você poderia começar a roda girador por conta própria usando um ProgressBar e defini-lo para ser interdeterminate. Se você estiver usando um AbsoluteLayout você pode colocá-lo sobre outros pontos de vista. Esta disposição deve demonstrar este método com 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>
A fim de criar um progresso tela cheia em um fundo escurecido Eu uso um FrameLayout e definir a visibilidade do RelativeLayout para visível quando necessário ou ido embora quando a longa operação é feita:
<?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>
A solução da Klarth trabalhou para mim, muito obrigado!
No meu caso eu usei o layout_gravity para a colocação centro da progress_indicator, ao invés de usar coordenadas explícitos.
<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"
/>