2013-03-20 6 views
13

ActionBar内に不確定な進行状況バーを配置したい(ActionBarSherlockを使用)。すべてが機能しますが、私はそれを小さな進捗バーにしたいと思います。私は以下のスタイルを使用します:ActionBarスタイリング - パディング問題のindeterminateProgressBar

<style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small"> 
    <item name="android:progressBarPadding">32dp</item> 
    <item name="progressBarPadding">32dp</item> 
    <item name="android:itemPadding">32dp</item> 
    <item name="itemPadding">32dp</item> 
</style> 


<style name="Widget.Styled.ActionBar.Tiles" parent="Widget.Sherlock.Light.ActionBar"> 
    <item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item> 
    <item name="android:progressBarPadding">32dp</item> 
    <item name="progressBarPadding">32dp</item> 
    <item name="android:itemPadding">32dp</item> 
    <item name="itemPadding">32dp</item> 
</style> 

問題は、プログレスバーにパディングを設定できないことです。あなたは上記を参照できるように、私はitemPaddingprogressBarPaddingのすべての組み合わせを試してみた、など

結果は常に同じです: enter image description here

任意のアイデア?

答えて

10

私は適切なサイズとパディング不確定進捗バーを設定するために、どのように働いて解決策を見つけました。私のソリューションはsetActionView()で回避策を使用していません。ネイティブアクションバー(ActionBarSherlock)でサポートされている、組み込みプログレスバー機能のソリューションです。プログレスバーはsetProgressBarIndeterminateVisibility(boolean)メソッドによって有効/無効にされます。 Android 2、3、4、ldpi、mdpi、xhdpiでテストしました。

Result

のAndroidManifest.xml:

<application 
    ... 
    android:theme="@style/Theme.Example"> 

/res/values/styles.xml:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    ... 

    <style name="Theme.Example" parent="Theme.Sherlock"> 
     <item name="actionBarStyle">@style/Example.ActionBar</item> 
     <item name="android:actionBarStyle">@style/Example.ActionBar</item> 
    </style> 

    <style name="Example.ActionBar" parent="Widget.Sherlock.ActionBar"> 
     <item name="indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item> 
     <item name="android:indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item> 
    </style> 

    <style name="Example.ActionBar.IndeterminateProgressBar" parent="@android:style/Widget.ProgressBar.Large.Inverse"> 
     <item name="android:indeterminateDrawable">@drawable/layer_list_ab_indeterminate_progress_bar</item> 
     <item name="android:minWidth">@dimen/ab_indeterminate_progress_bar_size</item> 
     <item name="android:maxWidth">@dimen/ab_indeterminate_progress_bar_size</item> 
     <item name="android:minHeight">@dimen/ab_indeterminate_progress_bar_size</item> 
     <item name="android:maxHeight">@dimen/ab_indeterminate_progress_bar_size</item> 
    </style> 
</resources> 

/res/drawable/layer_list_ab_indeterminate_progress_bar.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <!-- 
     /res/drawable-mdpi/ab_indeterminate_progress_bar asset is taken from 
     /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png 
     and its content (optical square) is resized to ~0.6 (must be even number) 

     /res/drawable-mdpi-v14/ab_indeterminate_progress_bar asset is taken from 
     /sdk/platforms/android-18/data/res/mdpi/spinner_48_outer_holo.png 
     and its content (optical square) is resized to 0.75 
     --> 
     <rotate 
      android:drawable="@drawable/ab_indeterminate_progress_bar" 
      android:interpolator="@android:anim/linear_interpolator" 
      android:pivotX="50%" 
      android:pivotY="50%" 
      android:fromDegrees="0" 
      android:toDegrees="360" /> 
    </item> 
</layer-list> 

/res/values/dimens.xml:

<dimen name="ab_indeterminate_progress_bar_size">48dp</dimen> 

最後に、私はプログレスバーの資産を作成しました。私は、Android SDKからこれら二つの資産を使用:ハニカムと古い

  • /SDK /プラットフォーム/アンドロイド-18用/sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png

    • 適切なサイズとパディングを取得するにはICS以降

    ため/data/res/mdpi/spinner_48_outer_holo.png、我々は資産のサイズを変更する必要があります。 spinner_white_48.pngを〜0.6にリサイズしました。 mdpiでは28pxでした。中心対称でなければなりません。全体のアイコンではなく、コンテンツのサイズを変更しました。したがって、mdpiのアイコンはまだ48pxですが、その内容(光学正方形)はより小さい(28px)。この方法で簡単にコンテンツのサイズを変更することができます。まず、「画像サイズ」を28ピクセル×28ピクセルに変更し、次に「キャンバスサイズ」を48ピクセル×48ピクセルに変更します。 spinner_48_outer_holo.pngを0.75にリサイズしました。以下のアセットをダウンロードできます。

    HoneycombとICS +に異なるアセットを使用するのはなぜですか?私がHoloアセットだけを使用している場合、アニメーションはHoneycomb-が搭載されているデバイスによっては少し驚くほどです。

    ヒント:アニメーションを含む別のアイテムをlayer_list_ab_indeterminate_progress_bar.xmlに追加できます。たとえば、標準のHoloプログレスバーでは、反対方向と異なる度数範囲の2つのアニメーションが使用されます。 SDKのprogress_medium_holo.xmlを参照してください。

    /res/drawable-mdpi/ab_indeterminate_progress_bar.png:

    enter image description here

    /res/drawable-mdpi-v14/ab_indeterminate_progress_bar.png(このページのほとんど見えない):

    enter image description here

    /res/drawable-hdpi/ab_indeterminate_progress_bar.png:

    enter image description here

    /res/drawable-hdpi-v14/ab_indeterminate_progress_bar.png(このページのほとんど見えない):

    enter image description here

    /res/drawable-xhdpi/ab_indeterminate_progress_bar.png:

    enter image description here

    /res/drawable-xhdpi-v14/ab_indeterminate_progress_bar。PNG(このページのほとんど見えない):

    enter image description here

  • +0

    本当にカスタムdrawablesとアセットのサイズを変更せずに行う方法はありますか?あなたが言及した様式で 'minWidth'、' minHeight'、 'maxWidth'、' maxHeight'を設定することによって、望みの効果をほとんど得ることができますが、 'ProgressBar'はまるで三ドットオーバーフローメニューアイコンなしで現れますそれは恐ろしい)。 'padding'を設定すると、スタイル内の' layout_margin'は効果がありません。なぜ!なぜ!!?? – janakagamini

    1

    私は正確な答えを知らないが、これらの設定は、私のために働いたが...

    これは私のrefresh_spinner.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center"> 
    <ProgressBar android:layout_width="32dp" 
    android:layout_height="32dp" 
    android:layout_gravity="center" 
    android:layout_marginRight="12dp" 
    android:layout_marginLeft="12dp" 
    style="?indeterminateProgressStyle" /> 
        </FrameLayout> 
    

    そして、この対応するスタイルではxmlです

    <style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.ActionBar"> 
        <item name="indeterminateProgressStyle">?android:attr/progressBarStyleSmallInverse</item> 
    </style> 
    

    これらの設定は私のために働いた。 ご不明な点がありましたらお知らせください。

    よろしく Parvaz Bhaskar

    EDIT2:私は後で下の私のスピナーのxmlからそれをrefrenced私style.xmlで唯一のプロパティとしてのattr/progressBarStyleSmallInverse :?私はアンドロイドを使用して終了異なる方法をしようとしていたので、 style = "?indeterminateProgressStyle"

    編集: menuItemの参照を保持し、リフレッシュプログレスバーを表示するときは、setActionView(R.layout.your_layout)を使用して、必要が終了したらnullに変更します。 。 onCreateOptionsMenuは、開始時にmenuItemを取得するのに適しています。

    +1

    おかげで、それはうまくいきませんでした。正直言って、あなたのスタイルのどこにあっても 'refresh_spinner.xml'ファイルを参照していないので、どのように動作するのか分かりません。 'ActionBar'内の' ProgressBar'を意味していますか –

    +0

    申し訳ありません。 menuItem.setActionView(R.layout.refresh_spinner)でクリックしたときにmenuItemを置き換え、通常状態に戻すためにmenuItem.setActionView(null)を使用して、orignalアイコンを削除して保持します。 –

    +0

    アクションビューのソリューションを認識していました。とにかく:)ありがとうと:) –

    1

    私はこの今日会い、のための解決策を見つけるのAndroid 3月4日+

    ProgressBar mProgressBarInActionBar = null; 
    Resources res = Resources.getSystem(); 
    int id = res.getIdentifier("progress_circular", "id", "android"); 
    View internal = findViewById(id); 
    if(internal != null && internal instanceof ProgressBar){ 
        mProgressBarInActionBar = (ProgressBar)internal; 
    } 
    mProgressBarInActionBar.setPadding(0, 0, right, 0); 
    

    設定し、適切な: )

    1

    私は同じ問題を抱えていて、簡単な答えが見つかりました:

    <style name="ActionBarProgressBar.MyStyle" parent="@android:style/Widget.Holo.ProgressBar.Large"> 
         <item name="android:minWidth">56dp</item> 
         <item name="android:maxWidth">56dp</item> 
         <item name="android:minHeight">35dp</item> 
         <item name="android:maxHeight">35dp</item> 
    </style> 
    

    幅は、アクションバーの標準アイテムの幅です。 minHeightとmaxHeightを変更すると、画像は両方向に拡大縮小されます。

    <style name="action_bar_theme" parent="@android:style/Widget.Holo.ActionBar"> 
         <item name="android:indeterminateProgressStyle">@style/ActionBarProgressBar.MyStyle</item> 
    </style> 
    

    そして、あなたは(あなたのマニフェストにそれを使用することを忘れないでください)を使用しているテーマで定義:

    そして、ここではあなたが不確定進捗の外観を設定するアクションバースタイリングです

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
         <item name="android:actionBarStyle">@style/action_bar_theme</item>  
    </style> 
    

    乾杯、 ポール

    +1

    これはうまくいきました、ありがとう – praveenb

    関連する問題