2010-03-09 57 views
6

我想展示一個模式的進展「輪」覆蓋在我的看法。Android:如何創建模態進度「車輪」覆蓋?

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代碼)。

+0

應也許重新回答正確的答案似乎選擇的只是一個指向教程的指針,每個人都投票的人有一個更好的例子。 – JPM 2013-01-17 17:54:36

回答

1

你看過這個tutorial嗎?在頁面結尾討論如何創建一個自定義對話框,並且這可能會幫助您將微調器進度對話框與自己的背景放在一起。

12

不知道是否有更好的方法,但您可以通過使用ProgressBar並將其設置爲interdeterminate來自行獲取轉輪。如果您使用的是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> 
+1

謝謝,我相信這也會起作用,所以我已經投了票,但我選擇了另一種解決方案,因爲它更容易實施。 – 2010-03-10 23:43:22

+0

只爲剛接觸這個問題的每個人。 AbsoluteLayout自API Level 3以來已被棄用。這對你們意味着什麼。 – 2015-02-02 16:57:22

+0

由於AbsoluteLayout已被刪除,因此使用FrameLayout將事物置於彼此之上,就像EZDs的答案一樣。 – antix 2016-03-29 17:40:14

3

Klarth的解決方案爲我工作,謝謝!

在我的情況下,我使用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" 
     /> 
9

爲了在黑暗的背景我用一個FrameLayout裏創建一個全屏幕的進展和需要或一去不復返了設置的RelativeLayout到可見的可見性時長操作完成:

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

我真的很喜歡這個想法,很容易實現。我只是建議在RelativeLayout中添加一個返回true的'OnTouchEventListener',以便你的touch事件不會被傳遞到底層的FrameLayout。 – Griddo 2014-06-26 05:53:50

+0

另一個解決方案是使FrameLayout'android:clickable =「true」' – bgs 2017-10-02 20:48:52