2017-10-04 82 views
-1

我知道this is possible,但我想知道爲什麼我的解決方案無法正常工作。如何更改ProgressDialog的外觀?

ProgressDialog dialog = new ProgressDialog(context); 
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
dialog.setIndeterminate(true); 
dialog.setCancelable(false); 
dialog.setCanceledOnTouchOutside(false); 
TextView textView = (TextView) LayoutInflater.from(context).inflate(R.layout.custom_text, null, false); 
textView.setText(context.getResources().getString(msg)); 
dialog.setView(textView); 

這是custom_text

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/messageSpinner" 
style="@style/TextAppearance.AppCompat.Medium" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:textColor="@color/colorAccent" 
android:textStyle="bold"> 

</TextView> 

佈局的結果是與期望的葉輪,但空消息的窗口。

+1

您更改對話框的視圖。現在無論你放在那個定製的XML中,都會出現在對話框中,也就是放置一個ProgresBar – ADM

回答

0

您正在重寫對話框視圖。現在對話框只顯示您的自定義視圖。嘗試添加進度條也佈局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<ProgressBar 
android:layout_width="30dp" 
android:layout_height="30dp"/> 


<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/messageSpinner" 
style="@style/TextAppearance.AppCompat.Medium" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:textColor="@color/colorAccent" 
android:textStyle="bold"> 

</TextView> 
</LinearLayout> 
0

MainActivity.java

import android.os.Bundle; 
import android.os.Handler; 
import android.app.Activity; 
import android.app.Dialog; 
import android.content.Context; 
import android.view.Gravity; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup.LayoutParams; 
import android.view.WindowManager; 
import android.view.animation.Animation; 
import android.view.animation.LinearInterpolator; 
import android.view.animation.RotateAnimation; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 

public class MainActivity extends Activity implements OnClickListener { 

    private TransparentProgressDialog pd; 
    private Handler h; 
    private Runnable r; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     h = new Handler(); 
     pd = new TransparentProgressDialog(this, R.drawable.spinner); 
     r =new Runnable() { 
      @Override 
      public void run() { 
       if (pd.isShowing()) { 
        pd.dismiss(); 
       } 
      } 
     }; 
     findViewById(R.id.the_button).setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     pd.show(); 
     h.postDelayed(r,5000); 
    } 

    @Override 
    protected void onDestroy() { 
     h.removeCallbacks(r); 
     if (pd.isShowing()) { 
      pd.dismiss(); 
     } 
     super.onDestroy(); 
    } 

    private class TransparentProgressDialog extends Dialog { 

     private ImageView iv; 

     public TransparentProgressDialog(Context context, int resourceIdOfImage) { 
      super(context, R.style.TransparentProgressDialog); 
      WindowManager.LayoutParams wlmp = getWindow().getAttributes(); 
      wlmp.gravity = Gravity.CENTER_HORIZONTAL; 
      getWindow().setAttributes(wlmp); 
      setTitle(null); 
      setCancelable(false); 
      setOnCancelListener(null); 
      LinearLayout layout = new LinearLayout(context); 
      layout.setOrientation(LinearLayout.VERTICAL); 
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
      iv = new ImageView(context); 
      iv.setImageResource(resourceIdOfImage); 
      layout.addView(iv, params); 
      addContentView(layout, params); 
     } 

     @Override 
     public void show() { 
      super.show(); 
      RotateAnimation anim = new RotateAnimation(0.0f, 360.0f , Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f); 
      anim.setInterpolator(new LinearInterpolator()); 
      anim.setRepeatCount(Animation.INFINITE); 
      anim.setDuration(3000); 
      iv.setAnimation(anim); 
      iv.startAnimation(anim); 
     } 
    } 

} 

activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:padding="8dp" 
     android:textSize="20sp" 
     android:text="Transparent Progress Indicator" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Check it out!" 
     android:layout_marginTop="40dp" 
     android:layout_gravity="center" 
     android:id="@+id/the_button" />" 

</LinearLayout> 

styles.xml

<resources> 

    <!-- 
     Base application theme, dependent on API level. This theme is replaced 
     by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 
    --> 
    <style name="AppBaseTheme" parent="android:Theme.Light"> 
     <!-- 
      Theme customizations available in newer API levels can go in 
      res/values-vXX/styles.xml, while customizations related to 
      backward-compatibility can go here. 
     --> 
    </style> 

    <!-- Application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
    </style> 

    <!-- Transparent dialog --> 
    <style name="TransparentProgressDialog" parent="@android:Theme.Dialog"> 
     <item name="android:windowFrame">@null</item> 
     <item name="android:windowBackground">@android:color/transparent</item> 
     <item name="android:windowIsFloating">true</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:windowTitleStyle">@null</item> 
     <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
     <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
     <item name="android:backgroundDimEnabled">true</item> 
     <item name="android:background">@android:color/transparent</item> 
    </style> 

</resources> 

繪製/ spinner.png

enter image description here

輸出

enter image description here