Android静态百分比栏视图 - 不是进度条

时间:2014-08-17 19:52:42

标签: android listview android-framelayout

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

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

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

    c. Name3
        55.22 ===         30%

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

"图表"应该是纯色线,但100%的整个宽度需要在那里,它应该占据可用的整个宽度,除了最左边的值和最右边的百分比。此外,相对于集合中的最低值,百分比是更高的百分位数!

无论如何,我已经尝试了一个带有ProgressBar的FrameLayout,这似乎不适合这个加上我无法按照我想要的方式进行布局。我正在思考一张1px的彩色图像,我将所需的百分比拉伸,然后在剩下的时间内拉出1px的暗图像。

有什么想法吗?谢谢!

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

这是我在布局中所做的:

    <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)方法。如果我能得到那个,那么我就完蛋了。有任何想法吗?谢谢!

3 个答案:

答案 0 :(得分:1)

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

您可以在1个水平 LinearLayout Parent下使用2 LinearLayout 。将父布局的 Weightsum 设置为100.第一个LinearLayout左边是暗图像,第二个是光图像。然后根据百分比设置左孩子的体重,并将剩余百分比设为右 LinearLayout

回答您的编辑问题:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

使用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();
            }
        });