Android Drawable:在XML文件中指定形状宽度(以百分比表示)?

时间:2011-05-19 15:52:37

标签: android xml drawable shape

我正在尝试创建一个简单的Drawable,我想将其设置为视图的背景(使用 setBackgroundDrawable )。我只是想将drawable的背景划分为2个相等的矩形(50% - 50%),第一个想要用黑色填充,第二个用白色填充:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/back_color_1">
        <shape android:shape="rectangle">
          <solid android:color="#000000" />
        </shape>
    </item>
    <item android:id="@+id/back_color_2">
        <shape android:shape="rectangle">
          <solid android:color="#FFFFFF" />
        </shape>
    </item>
</layer-list>

如何在可绘制XML定义文件中指定每个形状的宽度应为50%?类似 android:width =“50%”

(我正在使用Android 3.0,但我认为这是一个普遍的Android问题。)

P.S:您可以在CSS或XAML中执行此操作。

5 个答案:

答案 0 :(得分:10)

您无法指定百分比。您需要为其指定Dimension值。

此处定义了

android:widthhttp://developer.android.com/reference/android/R.attr.html#width

(强调我的)

  

必须是维值,这是一个附加了“14.5sp”等单位的浮点数。可用单位是:px(像素),dp(与密度无关的像素),sp(基于首选字体大小的缩放像素),in(英寸),mm(毫米)。

有关每种维度类型的定义,请参阅:http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

您需要创建自己的属性(请参阅styleable)并在onDraw(...)中自行执行计算。

请参阅以下两个问题及其中的链接:

答案 1 :(得分:3)

没有真正的百分比设置,但您可能会接近。

似乎最简单的方法是使用图像作为背景绘图,然后只做一个黑白分割图像。

我知道拆分任何东西的唯一另一种方法是使用2个视图,每个视图都有自己的bg颜色,并且每个视图给出了android:layout_weight属性(即50/50)相同的正值。然后他们将分割可用空间。

希望这有帮助!

答案 2 :(得分:3)

  

android:layout_weight =“。20”是以百分比实现的最佳方式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
    android:id="@+id/logTextBox"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight=".20"
    android:maxLines="500"
    android:scrollbars="vertical"
    android:singleLine="false"
    android:text="@string/logText" >
</TextView>

</LinearLayout>

答案 3 :(得分:2)

我发现这样做的方法是创建我自己继承自RelativeLayout的类,我在其中覆盖onMeasure方法。在此阶段,视图的高度已知,因此我获取了背景,并使用setLayerInset手动设置项目的插入。

    LayerDrawable bg = (LayerDrawable)getBackground();
    int h = getMeasuredHeight();
    bg.setLayerInset(1, 0, 0, 0, h/2);

这种方法虽然有点麻烦。在大多数情况下,克里斯提供的答案应该足够了。

答案 4 :(得分:0)

swapnil声明的最佳方法是在LinearLayout中使用layout_weight。 如果您要横向移动,请将layout_width设置为“fill_parent”,然后将layout_weight设置为您想要的百分比。从下面的内容开始,使用layout_width值来了解它(或添加更多视图以便更好地理解)。

<LinearLayout    
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation = "horizontal" >

    <View
      android:layout_width="fill_parent"
      android:layout_height="30dip"
      android:layout_weight="0.5"
      android:background="#aaffaa" />
    <View
      android:layout_width="fill_parent"
      android:layout_height="30dip"
      android:layout_weight="0.5"
      android:background="#aaaaff" />
</LinearLayout>