2012-09-27 53 views
1

只要我的應用程序啓動,AsyncTask就會檢索到一個JSON。雖然它的下載,我展示一個進度對話框像往常一樣:如何給android默認組件設置風格

protected void onPreExecute() { 
    Context c = ((EventoMainActivity)mCallback); 
    mDialog = new ProgressDialog(c, R.style.my_Dialog); 
    mDialog.setTitle("Descargando datos del evento "); 
    mDialog.setMessage("Espere un instante..."); 
    mDialog.setIndeterminate(true); 
    mDialog.show(); 
} 

因爲我想自定義對話框,我通過我的風格與構造改變顏色等,實現了以下結果:

enter image description here

(有些款式來自繼承自Widget.Sherlock.Light.ProgressBar)

到目前爲止好。隨着顏色文本屬性我將它改爲紅色,但這是我所做的一切。 問題是我想給標題文本,消息文本和那條藍色的線條賦予樣式。

我的做法是尋找在Android源此元素(它們的佈局XML文件)的結構。我發現progressDialog來自alertDialog。在那裏我發現定義標題參數和消息參數結構:

From alert_dialog.xml 
... 
<com.android.internal.widget.DialogTitle android:id="@+id/alertTitle" 
       style="?android:attr/textAppearanceLarge" 
       android:singleLine="true" 
       android:ellipsize="end" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 
... 

From progress_dialog.xml 
...  
<TextView android:id="@+id/message" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" /> 
... 

的問題是,android.R.id不包含這些ID所以我無法與findByID來達到這個代碼的參考意見並向他們申請我所希望的風格。

我知道該怎麼做一個自定義的佈局,但我不知道是否有某種方式來樣式默認組件

感謝

回答

0

經過一段時間的研究,我認爲這是不可能的。默認組件的樣式是使用您的應用無法訪問的id,除非您創建自己的自定義組件,否則無法使用它。

0

您可以使用包裝,在這裏你可以設定一個主題(風格)的任何東西在目前情況下。您可以將R.style.MyTheme設置爲警報對話框的樣式,並根據自己的喜好定製該視圖。

ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.MyTheme); 
AlertDialog.Builder builder= new AlertDialog.Builder(ctw); 
+0

我沒有使用AlertDialog,我正在使用ProgressDialog。我已經閱讀[this](http://stackoverflow.com/a/8037099/527775),但感謝copypaste。 –