4

をレンダリングするために Android がデフォルトで使用するドローアブルをプログラムで見つける必要がありますProgressBar。これは使用されているテーマに依存するため、次の行に沿って何かを試しました。

    TypedArray progressBarAttrs = context.getTheme().obtainStyledAttributes(
            new int[] { android.R.attr.indeterminateDrawable });
    progressDrawableId = progressBarAttrs.getResourceId(0, -1);

しかし、これは常に -1 を返します。

これは、 styleable などと宣言されていないためandroid.R.attr.indeterminateDrawableですか? 同じことを達成する他の方法はありますか?

4

2 に答える 2

0

必要に応じて、月曜日にさらにサポートを提供できることをうれしく思います (ちょうど外出して、あなたの質問に気づきました),

ただし、ここで Hackbods の回答https://stackoverflow.com/a/2130528/726954と、テーマからスタイル リソースをプルできるサンプル プロジェクトへのリンクを確認してください。

于 2013-04-12T15:59:55.217 に答える
0

以下は私のためにドローアブルを返します(試行錯誤、私は確かにobtainStyledAttributesがどのように解決されるかを正確に理解していません):

 int[] attrs = new int[] { android.R.attr.indeterminateDrawable /* index 0 */};
 TypedArray ta = context.obtainStyledAttributes(android.R.style.Widget_ProgressBar, attrs);
 // ....
 ta.recycle();

ただし、そのドローアブルをプログレスバーに割り当てる場合:

 progressBar.setIndeterminateDrawable(ta.getDrawable(0));

結果は、デフォルトの ProgressBar 不確定スピナーのようには見えません。これは Android のスピナーですが、より大きくて厚いです。

理由はわかりましたが、Android の ProgressBar.java は、描画可能なリソースを取得した後、それに対して何かを行うことに注意してください。

drawable = tileifyIndeterminate(drawable);
setIndeterminateDrawable(drawable);
于 2013-04-05T16:52:49.957 に答える