2013-08-30 52 views
27

我试图在我的框架顶部放置水平进度条。但似乎有填充,我根本无法删除。任何帮助?将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> 

回答

32

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" /> 
+16

这对于默认样式的更改有多强大?他们是否保证在所有的永恒中看起来和工作都一样,或者他们在理论上可以随时用替代它们的东西来替代它们,这会导致问题(例如看不见的进度条)。 – Joey

+6

这不适用于所有设备。在Galaxy S6上,即使使用'-6dp'顶部边距,进度条上方的空白仍然可见。 –

4

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

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

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

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

我的推荐:

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

enter image description here

+2

这是最终的正确答案。我将不得不编辑全部可绘制(9个补丁)的版本来摆脱填充。 –

-1

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

<ProgressBar 
      android:id="@+id/progressBar" 
      android:max="100" 
      android:layout_width="match_parent" 
      android:layout_height="2dp" 
      style="@android:style/Widget.ProgressBar.Horizontal" 
      /> 
+0

这不起作用。 –

+0

如果是这种情况,那么你应该改变对可绘制那些定制在您的样式文件 <样式名称=“Widget.Holo.ProgressBar.Horizo​​ntal”父=“Widget.ProgressBar.Horizo​​ntal”> <项目名称= “机器人:progressDrawable”>定制抽拉 <项目名= “机器人:indeterminateDrawable”>定制抽拉 <项目名= “机器人:layout_height”> 16dip <项目名= “机器人:maxHeight”> 16dip – Raghuram

3

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

  1. 复制所有8不确定的水平进度绘项目
  2. 编辑使用一些像机械手可绘制并删除不必要的垫衬
  3. 复制从Android平台
  4. 复制的风格插件的绘制名为progress_indeterminate_horizo​​ntal_holo.xml XML。 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" /> 
+0

谢谢Subin!我还没有真正着手这么做,因为我不确定除了编辑一张可绘制的图片之外,还有多少钱我们都知道。感谢分享。 –

+0

问题是关于'?android:attr/progressBarStyleHorizo​​ntal'而不是'@ style/Widget.ProgressBar.Horizo​​ntal' –

1

因为drawable在屏幕截图中按照预期工作,所以想出了另一种解决方案。只需将它推高6dp即可。

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

它只能运行API级别16以上。有没有什么办法可以修复API 8及以上版本? – bCliks