1

我想创建一个接收百分比并仅动态显示这部分背景的视图,作为参数。

例如,当创建一个参数为 0.8 的视图时;背景仅以视图宽度的 80% 绘制(左侧填充 0%,右侧填充 20%)。

我试图创建一个 DrawableGradient 作为 View 背景,但它与整个背景重叠,我无法调整这个背景的大小。

我的下一个选择是在这个答案中创建 InsetDrawable 或 Layer-List :Android drawable with background and gradient on the left,但我无法动态更改填充。

我目前使用的例子:res/layout/acitvity_main.xml

<LinearLayout 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"
android:orientation="vertical"
android:layout_margin="5dp"
tools:context=".MainActivity" >

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/percentage_background_80"
    android:text="80%" 
    android:textSize="16sp"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/percentage_background_20"
    android:text="20%"
    android:textSize="16sp"/>

</LinearLayout>

可绘制/percentage_background_20.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:bottom="5dp"
        android:drawable="@drawable/background"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp"/>
    <item
        android:bottom="5dp"
        android:drawable="@drawable/view_background"
        android:left="5dp"
        android:right="200dp"
        android:top="5dp"/>

</layer-list>

可绘制/percentage_background_80.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:bottom="5dp"
        android:drawable="@drawable/background"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp"/>
    <item
        android:bottom="5dp"
        android:drawable="@drawable/view_background"
        android:left="5dp"
        android:right="50dp"
        android:top="5dp"/>
</layer-list>

可绘制/背景.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <solid android:color="@android:color/white" />
</shape>

可绘制/view_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item><shape>
            <gradient
                android:angle="0"
                android:startColor="@android:color/holo_blue_dark"
                android:endColor="@android:color/white"
                android:type="linear" />
        </shape>
   </item>
</selector>

这就是它的外观,但我无法从源代码更改列表中的填充值。你知道我怎样才能实现它吗?

背景与百分比

澄清:在 drawable/percentage_background_80.xml 和 drawable/percentage_background_20.xml 中有元素:

android:right="XXXdp"

我想以编程方式更改值 XXXdp。

4

2 回答 2

1

使用 ClipDrawable 或 ScaleDrawable 取决于您是否只想剪辑目标 Drawable 或调整它的大小

于 2013-11-07T09:07:14.157 回答
-1

需要添加到:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/percentage_background_80"

    android:padding="your_padding"

    android:text="80%" 
    android:textSize="16sp"/>

这应该有效。对于动态,请阅读以下内容:

如何手动设置 textview 填充?

为动态 Android TextView 添加边距

编辑:

此外,您可以将 TextView 添加到布局并更改背景,如下所示:

<LinearLayout      
  android:id=@"+id/your_id"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

 <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/percentage_background_80"
        android:text="80%" 
        android:textSize="16sp"/>

</LinearLayout>

在您的班级中,只需使用方法findViewById并设置背景。

于 2013-11-07T08:00:29.403 回答