【问题标题】:Show numbers in ProgressBar在 ProgressBar 中显示数字
【发布时间】:2011-11-10 13:37:37
【问题描述】:

我有一个进度条。 它工作正常,但我需要显示最大值和当前值。 他们不在那里。

我需要改成 ProgressDialog 吗?

澄清:

我正在显示一个进度条。 条形图完美出现,但我希望数字也出现。 因此,例如,最大值为 1000,当前点为 300,然后我希望出现 1000,条形图的末端和 300 出现在条形图的某个位置或下方。

我使用这个类作为 List 适配器来填充 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>

这是最后一屏。 它是一系列任务及其迄今为止的进展的列表。 每个“行”都是一个单独的进度条。

【问题讨论】:

  • 为问题添加了更多说明。
  • 意味着您只想在每个列表视图行中显示最小值和最大值?
  • 最小值始终为零 - 但需要最大值和当前值。
  • 在 listview 行中添加一个 textview 以显示当前和最大值,并通过 getview() 方法设置它。您已经拥有 value maximum = Award.requirement;和当前=award.current_amount;你在进度条中设置的
  • 问题是为什么它没有自动出现?进度条旨在显示它。

标签: android progress-bar progressdialog


【解决方案1】:

新的 NumberProgressBar 库:

在 Github 中查看这个很棒的库 NumberProgressBar,其中包含更多颜色样式。

致谢:戴马家先生,

据他说NumberProgressBar 是一个酒吧,苗条又性感(每个男人都想要!)。

【讨论】:

  • 嘿,我是这个库的作者。如果有任何问题,请随时与我联系。
  • 当然.. 感谢很棒的图书馆!
  • 我受到了 NumberProgressBar 的启发,所以我用自定义的圆形和线条进度条做了一些类似的事情。如果需要,请查看.. Android-PercentProgressBar
【解决方案2】:

您为什么不手动添加文本,这似乎是一种非常简单的方法,我将其放置在我想要的任何位置,但是您可以根据需要更改布局。

对不起,如果代码中有任何错误,我没有运行这个。

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】:

    ProgressBar 旨在显示进度。 你会在这里找到一个很好的教程来显示相应的进度。推荐使用AsyncTask进行进度更新,因为它是无痛线程。

    Basic AsyncTask with a progress bar widget

    【讨论】:

    • 我自己添加数字没有问题。我只是想知道 ProgressBar 是否有办法显示自己。
    • @theblitz 我没听懂你,你想做什么。
    • 补充说明 - 希望对您有所帮助。
    • 问题是该链接正在谈论更改其显示方式。在我的情况下,数字完全显示出来。进度对话框的最大值和当前值在代码开始时设置一次。之后他们不会改变。数字根本不存在。
    • 你能上传一个屏幕截图吗?
    【解决方案4】:

    我认为您不想使用进度条。它看起来像一个 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>
    

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2016-01-09
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多