最近在做一個Android的項目,由於經驗不足,往往會遇到很多難以解決的問題,就喜歡上CSDN查閱資訊,很多時候還是都看到了好的文章順利解決了問題,我也會把那些對我有協助的文章收藏。 不巧這次又遇到了一個問題,先看下面圖片: 這是我在做登入頁面的時候,調用系統的ProgressDialog 進行等待,可是看起來很不協調,左邊的等待圖片過大,右邊文字過小,看起來老彆扭,雖然功能上不存在什麼問題,但是我有強迫症,看不順的就像弄掉。可是找了好久,沒發現 ProgressDialog 有一個方法是可以設定字型的。 於是我又來CSDN尋找解決方案,可是找了好久,翻了好幾頁都沒看到想要的結果,心冷了,找到的都說ProgressDialog 可以自訂一個View,在layout定義一個布局,然後設定到ProgressDialog 中,這確實是一個解決辦法,可是對我來說頗顯麻煩,我只是要一個等待效果,改一下字型,費不著去寫一個layout,在重寫一個ProgressDialog 吧。 最後我想想,可以設定ProgressDialog 的layout 那麼應該也可以擷取他的View吧,果然Dialog 就有一個擷取View的方法:
public abstract View getDecorView () Added in API level 1 Retrieve the top-level window decor view (containing the standard window frame/decorations and the client's content inside of that), which can be added as a window to the window manager. Note that calling this function for the first time "locks in" various window characteristics as described in
只要有了View 我就可以找到其中的TextView,並設定相應的字型大小,一下是我的實現代碼:
/** * 顯示 進度對話方塊 * @param message 訊息 * @param cancel 是否可取消 * @param textsize 字型大小 */ protected final void showProgressDialog(String message,boolean cancel,int textsize) { // TODO Auto-generated method stub mProgress = new ProgressDialog(this); mProgress.setMessage(message); mProgress.setCancelable(cancel); mProgress.setOnCancelListener(null); mProgress.show(); setDialogFontSize(mProgress,textsize); } private void setDialogFontSize(Dialog dialog,int size) { Window window = dialog.getWindow(); View view = window.getDecorView(); setViewFontSize(view,size); } private void setViewFontSize(View view,int size) { if(view instanceof ViewGroup) { ViewGroup parent = (ViewGroup)view; int count = parent.getChildCount(); for (int i = 0; i < count; i++) { setViewFontSize(parent.getChildAt(i),size); } } else if(view instanceof TextView){ TextView textview = (TextView)view; textview.setTextSize(size); } }
最後看: