2016-04-15 2 views
1

я не могу найти причину, почему стиль прогресса бара показан в неопределенном ProgressDialog отличается между Android 22 и 23.Android неопределенного прогресса бара стиль диалога прогресса

Давайте очень простой макет:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="example.com.progressbarcolor.MainActivity"> 

    <Button 
     android:id="@+id/show_progress" 
     android:text="Show progres" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true"/> 

    <ProgressBar 
     android:layout_width="match_parent" 
     android:layout_height="30dp" 
     android:layout_alignParentBottom="true" 
     android:indeterminate="true" 
     android:visibility="visible"/> 
</RelativeLayout> 

Нажатие кнопки отображает ProgressDialog:

ProgressDialog progressDialog = new ProgressDialog(MainActivity.this); 
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
progressDialog.setIndeterminate(false); 
progressDialog.setCancelable(false); 
progressDialog.setCanceledOnTouchOutside(false); 
progressDialog.show(); 

стиль приложения является:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

И наконец Gradle файла:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 

    defaultConfig { 
     applicationId "example.com.progressbarcolor" 
     minSdkVersion 16 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.3.0' 
} 

Как вы можете видеть на изображениях ниже оба приложения показывают тот же самый прогресс бар при использовании непосредственно внутри макета, но цвета отличаются внутри ProgressDialog.

На Android 22 в диалоговом окне прогресса отображается зеленый индикатор выполнения, а не красный.

Nexus 5, API 22

Nexus 5 - API 22

Nexus 5X, API 23

Nexus 5X - API 23

+0

AFAIK библиотека appcompat никогда не изменяет стиль ProgressBar ProgressDialog ... вы должны создать свой собственный диалог ... – Selvin

+0

У вас есть разные темы в разных стилях.xml ?? –

+0

Существует только одна тема для всех версий. – aguyngueran

ответ

5

Добавьте это в вашем стиле:

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog"> 
     <!-- Used for the buttons --> 
     <item name="colorAccent">@color/colorAccent</item> 
     <!-- Used for the title and text --> 
     <item name="android:textColorPrimary">@color/colorPrimaryDark</item> 
     <!-- Used for the background --> 
     <item name="android:background">@android:color/transparent</item> 
    </style> 

и установить в диалоговом окне :

ProgressDialog progressDialog = new ProgressDialog(MainActivity.this, R.style.MyAlertDialogStyle); 
+0

Похоже, что внесение изменений в прогресс, но все же: диалог не охватывает всю ширину, и на Android 19 это еще хуже, вы видели какую-то белую границу под прогрессом и над темным фоном. – aguyngueran

+0

​​@ android: color/transparent и ​​@ android: color/transparent исправляет границу. – Yar

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