动态更改背景可绘制填充

时间:2013-11-07 07:57:19

标签: android android-layout user-interface

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

E.g。创建参数为0.8的视图时;仅在视图宽度的80%(左边0%填充,右边20%填充)中绘制背景。

我尝试将DrawableGradient创建为View背景,但它与整个背景重叠,我无法调整此背景的大小。

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

我目前使用的示例: RES /布局/ 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>

抽拉/ background.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>

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

Background with percentage

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

android:right="XXXdp"

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

2 个答案:

答案 0 :(得分:1)

使用ClipDrawable或Scale Drawable,具体取决于您是否只想剪切目标Drawable或调整其大小

答案 1 :(得分:-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"/>

这应该有效。动态地,请阅读:

- how to manually set textview padding?

- Adding Margins to a dynamic 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 并设置背景。