27

我正在尝试在框架顶部放置一个水平进度条。但似乎有我根本无法删除的填充。有什么帮助吗?

在此处输入图像描述

<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>
4

5 回答 5

31

Pork'n'Bunny 的回答适用于 API 级别 16 及更高级别的设备。该解决方案适用于所有设备。只需在 XML 中将其推高 6dp。

 <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" />
于 2013-10-24T05:37:02.707 回答
4

从它的外观来看,我认为它是由默认样式中使用的图像引起的

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

(我指的是这个图像:@android:drawable/progress_indeterminate_horizontal_holo@android:drawable/progress_horizontal_holo_dark

这些图像有很多画布背景;因此它显示了这种差距。

我的建议:

使用自定义图像来设置 PregressBar 的样式。一个没有太多画布间距的。

在此处输入图像描述

于 2013-08-30T06:58:38.220 回答
4

这个问题的完整解决方案如下。以防万一有人需要代码片段,这就是我所做的。

  1. 复制了所有 8 个不确定的水平进度条可绘制对象
  2. 使用一些图像操纵器编辑了可绘制对象并删除了不必要的填充
  3. 从 android 平台复制名为 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>

最后,在我的本地布局文件中将最小高度设置为 4dp。

<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" />
于 2013-09-16T04:37:21.447 回答
2

想出了另一个解决方案,因为可绘制对象按屏幕截图中的预期工作。只需将其推高 6dp。

    mProgress = (ProgressBar) view.findViewById(R.id.fwv_progress);
    mProgress.animate().withLayer().yBy(-6.0f*getResources().getDisplayMetrics().density).setDuration(0).start();
于 2013-10-08T17:58:29.437 回答
-2

我认为问题出在高度属性上。尝试将布局高度设置为某个值

<ProgressBar
            android:id="@+id/progressBar"
            android:max="100"
            android:layout_width="match_parent"
            android:layout_height="2dp"
            style="@android:style/Widget.ProgressBar.Horizontal"
            /> 
于 2013-08-30T06:59:19.747 回答