web-dev-qa-db-ja.com

不確定なプログレスバーがAndroid Support Library

私のアプリケーションUIはAndroid Support Libraryを使用して構築されていますが、現在、アプリが本当に必要とする(intederminate)プログレスバーのAppCompatバージョンはありません。

マテリアルデザインのプログレスバーを達成するためにサードパーティのライブラリを使用したくないので、サポートライブラリに含まれていない理由についての情報に誰かが座っているのか、それが到着する兆候があるのか​​(いつ)あるのか疑問に思っています。

47
Joakim

ProgressBarAppCompatスタイルで使用できます。

これをレイアウトに追加するだけです:

<ProgressBar
        style="@style/Base.Widget.AppCompat.ProgressBar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:indeterminate="true"
        Android:visibility="visible" />

水平プログレスバーを使用する場合:

  <ProgressBar
        style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
        Android:layout_width="match_parent"
        Android:layout_height="8dp"
        Android:layout_marginTop="24dp"
        Android:indeterminate="true"
        Android:visibility="visible" />

彼らは公式の資料に従います ガイドライン

83

これは古い質問に対する答えですが、仲間の読者はこのソリューションに興味があるかもしれないと考えました。

サポートライブラリの新しいバージョン(26.1。+)には CircularProgressDrawable と呼ばれるクラスが含まれており、ネイティブマテリアルの不確定なドロアブルの正確な外観を実装します。レイアウトでこれを簡単に使用するには、次のようにMaterialProgressBarを構築できます。

public class MaterialProgressBar extends ProgressBar{
    // Same dimensions as medium-sized native Material progress bar
    private static final int RADIUS_DP = 16;
    private static final int WIDTH_DP = 4;

    public MaterialProgressView(Context context, AttributeSet attrs) {
        super(context, attrs);

        // The version range is more or less arbitrary - you might want to modify it
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Lollipop
                || Build.VERSION.SDK_INT > Build.VERSION_CODES.O_MR1) {

            final DisplayMetrics metrics = getResources().getDisplayMetrics();
            final float screenDensity = metrics.density;

            CircularProgressDrawable drawable = new CircularProgressDrawable(context);
            drawable.setColorSchemeColors(getResources().getColor(R.color.colorPrimary));
            drawable.setCenterRadius(RADIUS_DP * screenDensity);
            drawable.setStrokeWidth(WIDTH_DP * screenDensity);
            setIndeterminateDrawable(drawable);
        }
    }
}
7
FD_

ガブリエレ・マリオッティ氏によるスタイルを使った答えを改善しようとしています。

  1. このようなスタイルを書く

    <style name="infinite_progress_horizontal" parent="Widget.AppCompat.ProgressBar.Horizontal">
        <item name="Android:layout_width">match_parent</item>
        <item name="Android:layout_height">wrap_content</item>
        <item name="Android:indeterminate">true</item>
    </style>
    
  2. このようにプログレスバーで使用します。

    <ProgressBar style="@style/infinite_progress_horizontal" />
    
0