2013-08-23 3 views
24

Я уже сделал горизонтальный индикатор выполнения, и он отлично работает. Я хотел бы отобразить текстовое изображение или что-то подобное прямо посередине, показывая обратный отсчет, когда панель загружается. Имейте в виду, что это не диалог прогресса, индикатор выполнения находится внутри действия и показывает таймер обратного отсчета. Может ли кто-нибудь помочь мне, что это лучший способ сделать это и как я могу это сделать?Android - отображение текста в центре индикатора прогресса

ответ

33

Если ваш ProgressBar и TextView находятся внутри RelativeLayout вы можете дать ProgressBar идентификатор, а затем выровнять TextView с ProgressBar с помощью этого. Затем он должен отображаться поверх 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> 
+0

Только этот android: layout_alignTop = "@ id/simpleProgressBar" отлично работает для меня. –

8

Вы можете использовать FrameLayout для отображения TextView над ProgressBar:

... 
<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> 
+0

Хорошее решение. Не уверен в цели Relative Layout - кажется излишним. – dazed

+0

@dazed FrameLayout следует использовать для хранения одного дочернего представления, поскольку может быть сложно организовать дочерние представления таким образом, чтобы они были масштабируемы до разных размеров экрана, если бы дети не перекрывали друг друга. Тем не менее, вы можете добавить несколько детей в FrameLayout и управлять своей позицией в FrameLayout, назначив гравитацию каждому ребенку, используя атрибут android: layout_gravity. Источник: https://developer.android.com/reference/android/widget/FrameLayout.html В возобновлении RelativeLayout лучше, когда вы хотите поместить много просмотров и упорядочить их относительно друг друга. – androidevil

4

простейшим способом !

Check this link it is the best way as my point of view

Сделать 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(); 
} 
} 
0

это то, что работает для меня:

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

Это то, что я использовал для отображения текста прогресса выше блесны с центром на веб-просмотра:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <WebView 
     android:id="@+id/help_webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="#F22" 
     android:scrollbars="none" /> 


    <ProgressBar 
     android:id="@+id/progressBar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerInParent="true" 
     android:layout_centerVertical="true" /> 

    <TextView 
     android:id="@+id/progressBarMessage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Loading, please wait..." 
     android:layout_centerInParent="true" 
     android:layout_above="@id/progressBar" 
     android:background="#00000000" /> 


</RelativeLayout> 
Смежные вопросы