abe*_*ier 114 android android-progressbar
默认情况下,ProgressBar在条形本身的上方和下方都有一定的填充.有没有办法删除这个填充,以便只有最后的栏?
Ste*_*Wan 66
我使用以下作为此问题的解决方法.
android:layout_marginBottom="-8dp"
android:layout_marginTop="-4dp"
Run Code Online (Sandbox Code Playgroud)
pen*_*Dev 53
这就是我使用Juozas的答案:
我的身高ProgressBar是4dp.所以,我创建了一个FrameLayout具有高度4DP和设定layout_gravity的ProgressBar到center.它就像一个魅力.
<FrameLayout
android:layout_width="match_parent"
android:layout_height="4dp">
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_gravity="center"
android:indeterminate="true"/>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
Bin*_*abu 33
我最终使用自定义库来解决此问题.大多数其他解决方案都有效,但各种设备的结果并不一致.
MaterialProgressBar
- 在Android 4.0+上保持一致的外观.
- 跨平台校正着色.
- 能够删除框架ProgressBar的内在填充.
- 能够隐藏框架水平ProgressBar的轨道.
- 用作框架ProgressBar的替代品.
要添加为gradle依赖项:
compile 'me.zhanghai.android.materialprogressbar:library:1.1.7'
Run Code Online (Sandbox Code Playgroud)
要在布局中添加没有内在填充的ProgressBar,请执行以下操作:
<me.zhanghai.android.materialprogressbar.MaterialProgressBar
android:layout_width="wrap_content"
android:layout_height="4dp"
android:indeterminate="true"
app:mpb_progressStyle="horizontal"
app:mpb_useIntrinsicPadding="false"
style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal" />
Run Code Online (Sandbox Code Playgroud)
app:mpb_useIntrinsicPadding="false"诀窍.有关更多详细信息,请参阅GitHub页面.
Juo*_*nis 15
可以在父级内部绘制垂直居中的ProgressBar,以便剪掉填充.由于ProgressBar无法将自己绘制得比父级更大,因此我们必须创建一个大父级来放置在剪切视图中.
<FrameLayout
android:id="@+id/clippedProgressBar"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="4dp"
tools:ignore="UselessParent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="16dp"
android:layout_gravity="center_vertical">
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:indeterminate="true"/>
</FrameLayout>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
Sub*_*ian 14
该问题的完整解决方案如下.如果有人需要代码片段,这就是我所做的.
这是progress_indeterminate_horizontal_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" />
Run Code Online (Sandbox Code Playgroud)
样式资源复制到我的本地样式文件.
<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>
Run Code Online (Sandbox Code Playgroud)
最后,在我的本地布局文件中将min height设置为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" />
Run Code Online (Sandbox Code Playgroud)
Ali*_*ris 14
如果仍然需要帮助,可以尝试以下操作:
<androidx.core.widget.ContentLoadingProgressBar
android:id="@+id/progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline" android:indeterminate="true"
android:visibility="visible" app:layout_constraintBottom_toTopOf="@+id/guideline"/>
Run Code Online (Sandbox Code Playgroud)
在这里,进度条位于ConstraintLayout内,必须将constraintTop_toTopOf和constraintBottom_toTopOf属性应用于同一元素(在本例中,这是指导原则)。
小智 8
在使用带有水平样式的进度栏时遇到了相同的问题。
根本原因是进度栏的默认9色可绘制图形:(progress_bg_holo_dark.9.png)具有一些垂直的透明像素作为填充。
对我有用的最终解决方案:自定义进度可绘制对象,我的示例代码如下:
custom_horizontal_progressbar_drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="#33ffffff" />
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape android:shape="rectangle">
<solid android:color="#ff9800" />
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape android:shape="rectangle">
<solid android:color="#E91E63" />
</shape>
</clip>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
布局代码段:
<ProgressBar
android:id="@+id/song_progress_normal"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_alignParentBottom="true"
android:progressDrawable="@drawable/custom_horizontal_progressbar_drawable"
android:progress="0"/>
Run Code Online (Sandbox Code Playgroud)
小智 8
一个技巧是为您的进度条添加负边距。
下面是 XML 代码的示例,假设它位于屏幕顶部:
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-7dp"
android:layout_marginBottom="-7dp"
android:indeterminate="true" />
Run Code Online (Sandbox Code Playgroud)
要删除的垂直填充ProgressBar,您可以通过
ProgressBar示例包含1 wrap_content ProgressBar,1 8dp ProgressBar和1100dpProgressBar
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
...
android:layout_height="8dp"
android:scaleY="2" />
Run Code Online (Sandbox Code Playgroud)
小智 7
如果有人仍在寻找解决方案 - 检查此评论
将最小高度设置为4 dp
android:minHeight="4dp"
Run Code Online (Sandbox Code Playgroud)
——
<ProgressBar
android:id="@+id/web_view_progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false"
android:max="100"
android:min="0"
android:progress="5"
android:minHeight="4dp"
android:progressTint="@color/vodafone_red"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:progress="60" />
Run Code Online (Sandbox Code Playgroud)
Subin的答案似乎是唯一一个(目前)并不是一个脆弱的黑客,可能会在Android ProgressBar的未来版本中出现破坏.
但是,我没有遇到分解资源,修改资源和无限期维护资源的麻烦,而是选择使用MaterialProgressBar库,它为我们做到了:
<me.zhanghai.android.materialprogressbar.MaterialProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:layout_gravity="bottom"
custom:mpb_progressStyle="horizontal"
custom:mpb_showTrack="false"
custom:mpb_useIntrinsicPadding="false"
style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding"
/>
Run Code Online (Sandbox Code Playgroud)
在build.gradle中:
// Android horizontal ProgressBar doesn't allow removal of top/bottom padding
compile 'me.zhanghai.android.materialprogressbar:library:1.1.6'
Run Code Online (Sandbox Code Playgroud)
该项目有一个很好的演示,显示它与内置ProgressBar之间的差异.
小智 5
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/progress_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
android:indeterminate="true"
app:indicatorColor="@color/colorAccent"
app:layout_constraintTop_toBottomOf="@+id/app_bar_pdfview"/>
Run Code Online (Sandbox Code Playgroud)
我正在使用这个新的进度条
implementation 'com.google.android.material:material:1.3.0'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31781 次 |
| 最近记录: |