【问题标题】:Android static percentage bar view - not a progress barAndroid静态百分比栏视图 - 不是进度条
【发布时间】:2014-08-17 19:52:41
【问题描述】:

我正在尝试像这样在 ListView 中显示项目:

    a. Name1
        80.33 ======      60%

    b. Name2
       101.22 =======     70%

    c. Name3
        55.22 ===         30%

    d. Name4
       140.11 ========== 100%

“图表”应该是一条纯色线,但 100% 的整个宽度必须存在,并且它应该占据整个可用宽度,最左边的值和最右边的百分比除外。此外,相对于集合中的最低值,百分比是更多的百分位数!

无论如何,我已经尝试了带有 ProgressBar 的 FrameLayout,但这似乎不适合这个,而且我无法让它按照我想要的方式布局。我正在考虑一个 1 像素的彩色图像,我会拉伸我需要的百分比,然后在剩下的部分中添加一个 1 像素的深色图像。

有什么想法吗?谢谢!

编辑: 好的进展,但一个新的问题:

这是我在布局中所做的:

    <View
        android:id="@+id/pr_bar_1"
        android:layout_width="30dip"
        android:layout_height="4dip"
        android:layout_gravity="center_vertical"
        android:background="#ffffff" />

    <View
        android:id="@+id/pr_bar_2"
        android:layout_width="70dip"
        android:layout_height="4dip"
        android:layout_gravity="center_vertical"
        android:background="#333333" />

这看起来正是我想要的!但是...我现在似乎无法动态设置宽度。 View 类没有setLayoutWidth(int dip) 方法。如果我能做到,那我就完蛋了。有任何想法吗?谢谢!

【问题讨论】:

  • 已编辑以包含新的解决方案...和新的问题。

标签: android listview android-framelayout


【解决方案1】:

据我了解,您需要为得分百分比显示黑线。如果我错了,让我纠正。为此你可以试试这个:-

您可以在 1 个水平 LinearLayout 父级下使用 2 个 LinearLayout。将父 Layout 的 Weightsum 设置为 100。第一个 LinearLayout 左侧是深色图像,第二个是浅色图像。然后根据百分比设置左孩子的权重,将剩余的百分比给右LinearLayout

回答您的编辑问题:

LayoutParams     
 params=view_instan.getLayoutParams();
params.width=yourWidth;
view_instan.setLayoutParams(params);

【讨论】:

  • 感谢您的建议!与此同时,我找到了一个解决方案(在 EDIT 上方),但正如我现在所描述的,我遇到了一个新问题:无法动态设置 View 的 layout_width,啊!谢谢:-)
【解决方案2】:

如果您想要自定义的内容,请编写自己的视图并覆盖 onDraw 以完全按照您的意愿行事。

【讨论】:

    【解决方案3】:

    使用 view.setLayoutParams(params) 对我不起作用,我必须将代码放入可运行文件中。

    xml:

    <LinearLayout
        android:id="@+id/ll_parent"
        android:layout_width="match_parent"
        android:layout_height="6dp"
        android:baselineAligned="false"
        android:orientation="horizontal"
        android:background="@color/white"
        android:paddingStart="1dp"
        android:paddingEnd="1dp">
    
        <LinearLayout
            android:id="@+id/pr_bar_1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:layout_weight="0"
            android:layout_gravity="center_vertical"
            android:background="@color/blue">
        </LinearLayout>
    
        <LinearLayout
            android:id="@+id/pr_bar_2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:layout_weight="0"
            android:layout_gravity="center_vertical"
            android:background="@color/white">
        </LinearLayout>
    
    </LinearLayout>
    

    java:

    final int percentage = my_percentage;
    llParent.post(new Runnable() {
                @Override
                public void run() {
                    int fullWidth = llParent.getWidth();
    
                    prBar2.getLayoutParams().width = Math.round(fullWidth*((1 - ((float) (percentage/100)))));
                    prBar2.requestLayout();
                    prBar1.getLayoutParams().width = Math.round(fullWidth*((float) (percentage/100)));
                    prBar1.requestLayout();
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2018-05-11
      • 2015-06-03
      • 2010-11-22
      相关资源
      最近更新 更多