Android – 在进度条中心显示文字

我已经制定了一个水平进度条,它的工作完美。 我想显示一个文本视图或类似的东西在它的中间显示一个倒计时,因为酒吧正在加载。 请记住,它不是一个进度对话框,进度条驻留在一个活动中,并显示一个倒数计时器。 任何人都可以帮我,什么是最好的办法做到这一点,我怎么能做到这一点?

Solutions Collecting From Web of "Android – 在进度条中心显示文字"

如果你的ProgressBarTextView在一个RelativeLayout里面,你可以给ProgressBar一个id,然后使用它将TextViewProgressBaralignment。 它应该显示在ProgressBar之上。 确保背景是透明的,这样你仍然可以看到ProgressBar

例如:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ProgressBar android:layout_width="match_parent" android:layout_height="match_parent" // other attributes android:id="@+id/PROGRESS_BAR" > <TextView android:background="#00000000" // transparent // other attributes android:layout_alignLeft="@id/PROGRESS_BAR" android:layout_alignTop="@id/PROGRESS_BAR" android:layout_alignRight="@id/PROGRESS_BAR" android:layout_alignBottom="@id/PROGRESS_BAR" > </RelativeLayout> 

您可以使用FrameLayout在ProgressBar上显示TextView:

 ... <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ProgressBar android:id="@+id/progress" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:progressDrawable="@drawable/progressbar" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" /> ... </RelativeLayout> </FrameLayout> 

最简单的方法!

检查这个链接是我认为最好的方法

制作TextProgressBar

 public class TextProgressBar extends ProgressBar { private String text; private Paint textPaint; public TextProgressBar(Context context) { super(context); text = "HP"; textPaint = new Paint(); textPaint.setColor(Color.BLACK); } public TextProgressBar(Context context, AttributeSet attrs) { super(context, attrs); text = "HP"; textPaint = new Paint(); textPaint.setColor(Color.BLACK); } public TextProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); text = "HP"; textPaint = new Paint(); textPaint.setColor(Color.BLACK); } @Override protected synchronized void onDraw(Canvas canvas) { // First draw the regular progress bar, then custom draw our text super.onDraw(canvas); Rect bounds = new Rect(); textPaint.getTextBounds(text, 0, text.length(), bounds); int x = getWidth() / 2 - bounds.centerX(); int y = getHeight() / 2 - bounds.centerY(); canvas.drawText(text, x, y, textPaint); } public synchronized void setText(String text) { this.text = text; drawableStateChanged(); } public void setTextColor(int color) { textPaint.setColor(color); drawableStateChanged(); } } 

那是对我有用的东西:

  <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ProgressBar android:id="@+id/progressBar" style="@android:style/Widget.ProgressBar.Horizontal" android:progressDrawable="@drawable/customprogressbar" android:layout_width="match_parent" android:layout_height="match_parent" android:max="100"/> <TextView android:id="@+id/progressBarinsideText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:gravity="center" /> </RelativeLayout>