2010-05-09 18 views
20

Estaba siguiendo el ejemplo del diálogo de progreso en ApiDemos. todo fue genial, excepto por una cosa - Quiero eliminar los números que aparecen debajo de la barra (los números en ejecución que van de 0 a .getMax()ProgressDialog - cómo eliminar los números

no pudo encontrar cómo hacerlo

.. ?

cualquiera

Ori

+0

Aquí es otro ejemplo con el ejemplo de código http://stackoverflow.com/a/35453152/2799526 –

Respuesta

3

sólo se veía a través ProgressDialog.java, no hay manera oficial

Las opciones son:.

  • subclase, el acceso a través de la reflexión mProgressNumber.setVisibility(View.GONE);

  • Escriba su propia implementación.

+0

Gracias. Lo hice y me ayudó. – oriharel

56

Con api 11, podemos hacerlo llamando a:

progressDialog.setProgressNumberFormat(null); 
progressDialog.setProgressPercentFormat(null); 
9

Usar este código para Android < API de nivel 11. Se utiliza la reflexión para establecer el visbility a IDO:

public class CustomProgressDialog extends ProgressDialog { 

public CustomProgressDialog(Context context) { 
    super(context); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    try { 
     Method method = TextView.class.getMethod("setVisibility", 
       Integer.TYPE); 

     Field[] fields = this.getClass().getSuperclass() 
       .getDeclaredFields(); 

     for (Field field : fields) { 
      if (field.getName().equalsIgnoreCase("mProgressNumber")) { 
       field.setAccessible(true); 
       TextView textView = (TextView) field.get(this); 
       method.invoke(textView, View.GONE); 
      } 
     } 
    } catch (Exception e) { 
     Log.e(TAG, 
       "Failed to invoke the progressDialog method 'setVisibility' and set 'mProgressNumber' to GONE.", 
       e); 
    } 
} 
} 
+4

ejemplo de código es siempre mejor! –

+1

Utilicé tu código para construir el mío que también puede ocultar el porcentaje. Gracias –

5

Para completar, uso la respuesta de Martin para construir mi clase:

import java.lang.reflect.Field; 
import java.lang.reflect.Method; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 

public class CustomProgressDialog extends ProgressDialog { 

    private int progressPercentVisibility = View.VISIBLE; 
    private int progressNumberVisibility = View.VISIBLE; 

    public CustomProgressDialog(Context context, int progressPercentVisibility, int progressNumberVisibility) { 
     super(context); 

     this.progressPercentVisibility = progressPercentVisibility; 
     this.progressNumberVisibility = progressNumberVisibility; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setFieldVisibility("mProgressPercent", progressPercentVisibility); 
     setFieldVisibility("mProgressNumber", progressNumberVisibility); 
    } 

    private void setFieldVisibility(String fieldName, int visibility) { 
     try { 
      Method method = TextView.class.getMethod("setVisibility", Integer.TYPE); 

      Field[] fields = this.getClass().getSuperclass() 
        .getDeclaredFields(); 

      for (Field field : fields) { 
       if (field.getName().equalsIgnoreCase(fieldName)) { 
        field.setAccessible(true); 
        TextView textView = (TextView) field.get(this); 
        method.invoke(textView, visibility); 
       } 
      } 
     } catch (Exception e) { 
     } 
    } 
} 

Con esto también puede ocultar el porcentaje.

0

Tomé la respuesta de @ MartinVonMartinsgrün y la modifiqué un poco. Esta solución simplemente aprovecha la llamada API en Honeycomb +, mientras que utiliza la reflexión para lograr el mismo objetivo para Gingerbread y antes.

ProgressDialog dialog; 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    dialog = new ProgressDialog(getContext()); 
    dialog.setProgressNumberFormat(null); 
} else { 
    dialog = new ProgressDialog(getContext()) { 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      try { 
       Field field = ProgressDialog.class.getDeclaredField("mProgressNumber"); 

       field.setAccessible(true); 
       TextView textView = (TextView)field.get(this); 
       field.setAccessible(false); 

       textView.setVisibility(View.GONE); 
      } catch (Exception e) { 
       // Ignore the exception ... We'll just let the dialog show the bytes. It's not ideal but it works. 
       Log.w("ProgressDialog", "Failed to hide the progress number via reflection.", e); 
      } 
     } 
    }; 
} 

// Further configure the dialog ... 

dialog.show(); 
Cuestiones relacionadas