2010-05-09 2 views
20

Я следовал примеру диалога прогресса в ApiDemos. все прошло замечательно, за исключением одного - я хочу, чтобы удалить цифры, которые появляются под бар (те бегущие цифры, которые работают от 0 до .getMax()ProgressDialog - как удалить цифры

не мог найти, как это сделать

.. ?

кто

Ori

+0

Вот еще один пример с кодом образца http://stackoverflow.com/a/35453152/2799526 –

ответ

3

Просто просмотрел ProgressDialog.java, нет никакого официального способа

Возможны следующие варианты:.

  • Подкласс его, доступ mProgressNumber посредством отражения в .setVisibility(View.GONE);

  • Напишите свою собственную реализацию.

+0

Спасибо. Я сделал это, и это помогло. – oriharel

56

С апи 11, мы можем сделать это по телефону:

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

Используйте этот код для Android < уровня API 11. Он использует отражение, чтобы установить visbility Унесенные:

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

Пример кода всегда лучше! –

+1

Я использовал ваш код, чтобы создать свой собственный, который также может скрыть процент. благодаря –

5

Для полноты, Я использую ответ Martin, чтобы построить мой класс:

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) { 
     } 
    } 
} 

С этим вы также можете скрыть процент.

0

Я принял ответ @ MartinVonMartinsgrün и немного изменил его. Это решение просто использует API-вызов в Honeycomb +, в то время как он использует отражение для достижения той же цели для Gingerbread и ранее.

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();