2015-03-01 2 views
1

Мой загрузочный круг работает нормально, но за ним стоит белая коробка, как видно here. Я потратил несколько часов на поиск решений, и все найденные мной сообщения SO предлагают реализацию, очень похожую на ту, которую я использовал. Я также попытался применить специальную тему к диалогу и установить прозрачность, но это ничего не делало. Я не уверен, что на самом деле белый прямоугольник, так как изменение свойств самого ProgressBar влияет только на квадрат в центре, содержащем изображение.Белый индикатор появляется за индикатором прогресса

У меня есть следующий макет, определенный для моего индикатора выполнения, который выполняется во время моей AsyncTask.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:background="@android:color/transparent" > 

    <ProgressBar 
     android:id="@+id/progressBar1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:indeterminate="true"/> 

</FrameLayout> 

Ниже представлен мой метод для диалога, в котором используется макет, показанный выше.

public static ProgressDialog createProgressDialog(Context mContext) { 
     ProgressDialog dialog = new ProgressDialog(mContext); 
     try { 
      dialog.show(); 
     } catch (WindowManager.BadTokenException e) { 

     } 
     dialog.setCancelable(false); 
     dialog.setContentView(R.layout.progressdialog); 
     return dialog; 
    } 

    public class FetchAcroTask extends AsyncTask<String, Void, String[]> { 

     Dialog progressDialog = null; 

     @Override 
     protected void onPreExecute() { 

      // Display loading circle 
      if (progressDialog == null) { 
       progressDialog = createProgressDialog(AcroActivity.this); 
       progressDialog.show(); 
      } else { 
       progressDialog.show(); 
      } 
     } 

     @Override 
     protected String[] doInBackground(String... params) { 

      if (params.length == 0) { 
       return null; 
      } 
      return GET(params[0]); 
     } 

     @Override 
     protected void onPostExecute(String[] resultStrs) { 

      if (resultStrs == null) { 
       acroAdapter.add("No results were found"); 
      } else { 
       acroAdapter.addAll(resultStrs); 
      } 

      // Dismiss loading circle 
      progressDialog.dismiss(); 

     } 
    } 
} 

Заранее благодарен.

+0

Вы создаете диалоговое окно Actuall progress. Вы должны использовать ProgressBar. Найдите его представление по его идентификатору, а затем покажите его или отклоните его. –

+0

Вам нужно сделать свой диалог прозрачным http://stackoverflow.com/questions/10795078/dialog-with-transparent-background-in-android – tachyonflux

ответ

0

Я нашел решение благодаря комментарию, оставленному Kostas.

Я перенес свою декларацию ProgressBar в свой файл макета для этой операции и просто спрячу ее, когда моя AsyncTask завершена.

В файле макет моей деятельности в:

<ProgressBar 
    android:id="@+id/progressBar1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" /> 

В задачах асинхронных:

@Override 
    protected void onPostExecute(String[] resultStrs) { 

     if (resultStrs == null) { 
      acroAdapter.add("No results were found"); 
     } else { 
      acroAdapter.addAll(resultStrs); 
     } 

     // Dismiss loading circle 
     progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
     progressBar.setVisibility(View.INVISIBLE); 
    } 

Спасибо.

Смежные вопросы