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

Posted

技术标签:

【中文标题】Android Drawable:在 XML 文件中以百分比指定形状宽度?【英文标题】:Android Drawable: Specifying shape width in percent in the XML file? 【发布时间】:2011-08-29 00:24:42 【问题描述】:

我正在尝试创建一个简单的 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:.

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

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

【问题讨论】:

【参考方案1】:

您不能指定百分比。您需要为其指定一个维度值。

android:width 在这里定义:http://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(...) 中自己执行计算。

请参阅这两个问题以及其中的链接作为示例:

Defining custom attrs

Declaring styleable attributes in Android

【讨论】:

【参考方案2】:

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

实现这一点的最简单方法似乎是使用图像作为背景可绘制对象,然后进行黑白分割图像。

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

希望这会有所帮助!

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

android:layout_weight=".20" 是实现百分比的最佳方式

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

</LinearLayout>

【讨论】:

【参考方案5】:

正如 swapnil 所说,最好的方法是在 LinearLayout 中使用 layout_weight。 如果您要水平移动,请将 layout_width 设置为“fill_parent”,然后将 layout_weight 设置为您想要的百分比。从类似下面的内容开始,并尝试使用 layout_width 值来感受它(或添加更多视图以更好地理解)。

<LinearLayout    
      android:layout_
      android:layout_
      android:orientation = "horizontal" >

    <View
      android:layout_
      android:layout_
      android:layout_weight="0.5"
      android:background="#aaffaa" />
    <View
      android:layout_
      android:layout_
      android:layout_weight="0.5"
      android:background="#aaaaff" />
</LinearLayout>

【讨论】:

以上是关于Android Drawable:在 XML 文件中以百分比指定形状宽度?的主要内容,如果未能解决你的问题,请参考以下文章

Android XML Drawable

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

xml 1像素边框。放在android drawable文件夹里面

Android drawable-v21文件夹下xml文件,手机版本不兼容

android.content.res.Resources$NotFoundException:文件 res/drawable-v21/launch_background.xml

Android点击按钮后改变颜色