web-dev-qa-db-ja.com

ProgressBarを水平に上に揃えます(ギャップを削除します)

フレームの上部に水平プログレスバーを配置しようとしています。しかし、私が単に取り除くことができなかったパディングがあるようです。何か助け?

enter image description here

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
          Android:layout_width="match_parent"
          Android:layout_height="match_parent">
<ProgressBar Android:id="@+id/flv_progress_bar"
             Android:layout_width="fill_parent"
             style="@Android:style/Widget.Holo.ProgressBar.Horizontal"
             Android:indeterminateOnly="true"
             Android:layout_height="wrap_content"
             Android:layout_gravity="top"/>
</FrameLayout>
27
Pork 'n' Bunny

Pork'n'Bunnyの回答は、APIレベル16以上のデバイスで機能しました。このソリューションはすべてのデバイスで機能しました。 6dpでXMLにプッシュするだけです。

 <ProgressBar
        Android:id="@+id/progressbar_Horizontal"
        style="?android:attr/progressBarStyleHorizontal"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:max="100"
        Android:layout_alignParentTop="true"
        Android:layout_marginTop="-6dp" />
31
bCliks

その見た目から、それはデフォルトのスタイリングで使用されている画像が原因であると思います

style="@Android:style/Widget.Holo.ProgressBar.Horizontal"

(私が参照している画像はこれです:@Android:drawable/progress_indeterminate_horizontal_holoおよび@Android:drawable/progress_horizontal_holo_dark

これらの画像には多くのキャンバスの背景があります。したがって、このギャップを示しています。

私の推薦:

カスタムイメージを使用してPregressBarのスタイルを設定します。キャンバスの間隔があまりないもの。

enter image description here

4
Sathya

この問題の完全な解決策は次のようになります。誰かがコードの断片を必要とする場合に備えて、これは私がやったことです。

  1. 8つの不確定な水平プログレスバードローアブルをすべてコピーしました
  2. 画像マニピュレータを使用してドローアブルを編集し、不要なパディングを削除しました
  3. Android platformから、progress_indeterminate_horizo​​ntal_holo.xmlという名前のドローアブルXMLをコピーしました
  4. スタイルWidget.ProgressBar.Horizo​​ntalとその親をコピーしました
  5. レイアウトで手動でスタイルとmin_heightを設定します

これがprogress_indeterminate_horizo​​ntal_holo.xmlです

<animation-list
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:oneshot="false">
<item Android:drawable="@drawable/progressbar_indeterminate_holo1" Android:duration="50" />
<item Android:drawable="@drawable/progressbar_indeterminate_holo2" Android:duration="50" />
<item Android:drawable="@drawable/progressbar_indeterminate_holo3" Android:duration="50" />
<item Android:drawable="@drawable/progressbar_indeterminate_holo4" Android:duration="50" />
<item Android:drawable="@drawable/progressbar_indeterminate_holo5" Android:duration="50" />
<item Android:drawable="@drawable/progressbar_indeterminate_holo6" Android:duration="50" />
<item Android:drawable="@drawable/progressbar_indeterminate_holo7" Android:duration="50" />
<item Android:drawable="@drawable/progressbar_indeterminate_holo8" Android:duration="50" />

ローカルリソースファイルにコピーされたスタイルリソース。

<style name="Widget">
    <item name="Android:textAppearance">@Android:attr/textAppearance</item>
</style>

<style name="Widget.ProgressBar">
    <item name="Android:indeterminateOnly">true</item>
    <item name="Android:indeterminateBehavior">repeat</item>
    <item name="Android:indeterminateDuration">3500</item>
</style>

<style name="Widget.ProgressBar.Horizontal">
    <item name="Android:indeterminateOnly">false</item>
    <item name="Android:indeterminateDrawable">@drawable/progress_indeterminate_horizontal_holo</item>
</style>

最後に、ローカルレイアウトファイルで最小高さを4 dpに設定します。

<ProgressBar
    Android:id="@+id/pb_loading"
    style="@style/Widget.ProgressBar.Horizontal"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:layout_centerHorizontal="true"
    Android:layout_centerVertical="true"
    Android:indeterminate="true"
    Android:minHeight="4dp"
    Android:minWidth="48dp"
    Android:progressDrawable="@drawable/progress_indeterminate_horizontal_holo" />
4
Subin Sebastian

ドローアブルがスクリーンショットで意図したとおりに機能しているので、別のソリューションを思いつきました。 6dp上げるだけです。

    mProgress = (ProgressBar) view.findViewById(R.id.fwv_progress);
    mProgress.animate().withLayer().yBy(-6.0f*getResources().getDisplayMetrics().density).setDuration(0).start();
2
Pork 'n' Bunny