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 Drawable:在 XML 文件中以百分比指定形状宽度?
xml 1像素边框。放在android drawable文件夹里面
Android drawable-v21文件夹下xml文件,手机版本不兼容
android.content.res.Resources$NotFoundException:文件 res/drawable-v21/launch_background.xml