Показывать числа в ProgressBar - PullRequest
7 голосов
/ 10 ноября 2011

У меня есть ProgressBar. Это работает нормально, но мне нужно показать максимальное значение и текущее значение. Их там нет.

Нужно ли мне переходить на ProgressDialog?

Пояснение:

Я показываю ProgressBar. Бар подходит идеально, но я хочу, чтобы цифры тоже появлялись. Так, например, если максимальное значение равно 1000, текущая точка равна 300, тогда я хочу, чтобы появилось 1000, а конец бара и 300 появятся где-нибудь на баре или чуть ниже него.

Я использую этот класс в качестве адаптера списка для заполнения ListView. Отображаемая строка зависит от типа данных в массиве «Награды». При выполнении ProgressBar он отображается без цифр.

Код:

private class AwardsAdapter extends ArrayAdapter <AwardItem>{


    private ArrayList<AwardItem> awards = new ArrayList<AwardItem>();

    public AwardsAdapter(Context context, int textViewResourceId, ArrayList<AwardItem> awards) {
        super(context, textViewResourceId,awards);
        this.awards = awards;
        // TODO Auto-generated constructor stub
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)AwardsActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.awards_row, parent, false);
        }
        AwardItem award = awards.get(position);
        ProgressBar pb = (ProgressBar) v.findViewById(R.id.pgbAwardProgress);

        if(award.award_type == PROGRESSIVE) {
            pb.setVisibility(View.VISIBLE);
            pb.setMax(award.requirement);
            pb.setProgress(award.current_amount);
            pb.setIndeterminate(false);

        } else {
            pb.setVisibility(View.GONE);
        }
        ((TextView) v.findViewById(R.id.tvwShortMessage)).
                      setText(MessageBuilder.buildMessage(AwardsActivity.this, award.award_text, 
                              Integer.valueOf(award.requirement).toString()));

        return v;
    }

}

Компоновка

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="fill_parent"
 android:layout_height="wrap_content">
<TextView android:id="@+id/tvwShortMessage"
android:typeface="sans"
android:textSize="14sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/tvwLongMessage"
android:typeface="sans"
android:textSize="14sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tvwShortMessage"/>
<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="wrap_content"    
android:layout_marginBottom="15dp" 
android:layout_below="@id/tvwLongMessage">
<ProgressBar
android:id="@+id/pgbAwardProgress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"    
style="?android:attr/progressBarStyleHorizontal"
android:layout_marginRight="5dp" 
android:layout_marginTop="5dp" 
android:layout_marginBottom="15dp" 
android:layout_alignParentTop="true"/>
</LinearLayout>
</RelativeLayout>

Это последний экран. Это список из серии задач и их прогресс на данный момент. Каждая «строка» - это отдельный индикатор выполнения.

enter image description here

Ответы [ 4 ]

4 голосов
/ 10 июня 2014

Новая библиотека NumberProgressBar:

Number progress bar

Посмотрите на эту удивительную библиотеку NumberProgressBar в Github со многими другими стилями цвета.

enter image description here

Кредиты: Mr.Daimajia,

По его словам NumberProgressBar - это бар, стройный и сексуальный (каждыйчеловек хочет!).

3 голосов
/ 22 ноября 2011

Почему бы вам просто не добавить текст вручную, кажется, что это очень простой подход, я разместил его там, где я хотел, но вы можете просто изменить макет на то, что вам нужно.

Извините, если в коде есть ошибки, я не запустил это.

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/tvwShortMessage"
android:typeface="sans"
android:textSize="14sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/tvwLongMessage"
android:typeface="sans"
android:textSize="14sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tvwShortMessage"/>
<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="wrap_content"    
android:layout_marginBottom="15dp" 
android:layout_below="@id/tvwLongMessage">
<ProgressBar
android:id="@+id/pgbAwardProgress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"    
style="?android:attr/progressBarStyleHorizontal"
android:layout_marginRight="5dp" 
android:layout_marginTop="5dp" 
android:layout_marginBottom="15dp" 
android:layout_alignParentTop="true"/>
</LinearLayout>
<TextView android:id="@+id/pgbAwardProgressText"
android:typeface="sans"
android:textSize="14sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/pgbAwardProgress"
android:layout_alignParentRight="true"
android:visibility="gone"/>
</RelativeLayout>

Класс:

private class AwardsAdapter extends ArrayAdapter <AwardItem>{


    private ArrayList<AwardItem> awards = new ArrayList<AwardItem>();

    public AwardsAdapter(Context context, int textViewResourceId, ArrayList<AwardItem> awards) {
        super(context, textViewResourceId,awards);
        this.awards = awards;
        // TODO Auto-generated constructor stub
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)AwardsActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.awards_row, parent, false);
        }
        AwardItem award = awards.get(position);
        ProgressBar pb = (ProgressBar) v.findViewById(R.id.pgbAwardProgress);

        if(award.award_type == PROGRESSIVE) {
            pb.setVisibility(View.VISIBLE);
            pb.setMax(award.requirement);
            pb.setProgress(award.current_amount);
            pb.setIndeterminate(false);
            TextView progressText = ((TextView) v.findViewById(R.id.pgbAwardProgressText));
            progressText.setVisibility(View.VISIBLE);
            progressText.setText(award.current_amount+"/"+award.requirement);
        } else {
            pb.setVisibility(View.GONE);
        }
        ((TextView) v.findViewById(R.id.tvwShortMessage)).
                      setText(MessageBuilder.buildMessage(AwardsActivity.this, award.award_text, 
                              Integer.valueOf(award.requirement).toString()));

        return v;
    }

}
3 голосов
/ 10 ноября 2011

ProgressBar предназначен для отображения прогресса. Вы найдете хороший учебник, чтобы показать прогресс соответственно. Для обновления Progress рекомендуется использовать AsyncTask, потому что это безболезненная многопоточность.

Базовая AsyncTask с виджетом индикатора выполнения

0 голосов
/ 22 ноября 2011

Не думаю, что вы хотите использовать индикатор прогресса. Он выглядит как SeekBar с несколькими цифрами на обоих концах.

<LinearLayout
    android:id="@+id/LinearLayout_Lose250HandsSlider"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/TextView_MinValue"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:text="0"/>
    <SeekBar
        android:id="@+id/SeekBar_Lose250HandsSlider"
        android:max="250"
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:layout_weight="1.0"/>
    <TextView
        android:id="@+id/TextView_CurrentValue"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:text="250"/>
</LinearLayout>
...