形状可绘制尺寸不起作用

chu*_*ubs 36 android drawable xml-layout shapedrawable

我有一个非常简单的形状,我想设置宽度:

<shape android:shape="rectangle">
    <solid android:color="@color/orange"/>
    <size android:width="2dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

但是,当我将它指定给EditText的背景时,它只显示橙色背景而不是宽度为2dp的矩形.为什么不设置尺寸?我想创建一个透明的drawable,左侧是橙色矩形.我也把它包裹在选择器中:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/orange"/>
            <size android:width="2dp" android:height="6dp"/>
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent"/>
        </shape>
    </item>
</selector>
Run Code Online (Sandbox Code Playgroud)

我试过添加高度只是为了看它是否会改变大小.它没有.这就像它完全忽略了它的大小.WTF?

Sim*_*pps 18

对我来说,将项目的重力设置为"中心"解决了这个问题.例如:

<item android:id="@android:id/progress" android:gravity="center">
    <clip>
        <shape>
            <size android:height="2dp"/>
            <solid android:color="@color/my_color"/>
        </shape>
    </clip>
</item>
Run Code Online (Sandbox Code Playgroud)

  • 为这家伙加冕! (2认同)

Ale*_*exD 9

只是指定user983447的答案 - size属性确实意味着一个比例.您应该为图层列表中的所有形状设置大小,并且在缩放时它将作为一个比例使用 - 就像layout_weight属性一样LinearLayout.因此,最好将它命名为a size而不是aweight

下面是如何在不使用size属性的情况下实现顶部和底部白线的解决方法:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <solid android:color="#fff" />
        </shape>
    </item>
    <item android:top="1dp" android:bottom="1dp">
        <shape>
            <solid android:color="#888" />
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)


and*_*guy 8

它可以用于foreground.看起来你无法设置背景的引力.但你可以在前台.我检查了API 21,23和24(以及Studio设计预览),下面在ImageView上放置一个实心圆点.

<shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/colorPrimary" />
    <size android:height="8dp" android:width="8dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)

使用布局代码段

    <ImageView
            android:foreground="@drawable/list_new_dot"
            android:foregroundGravity="right|center_vertical"
            tools:src="@drawable/model_1_sm"
            />
Run Code Online (Sandbox Code Playgroud)

更新:虽然它似乎在布局设计工具中工作,但它在模拟器中看起来并不相同.更新2:由于这个答案有几票,你可能想检查我实际使用的是什么,以显示一个新的指标点:https: //gist.github.com/CapnSpellcheck/4d4638aefd085c703b9d990a21ddc1eb


use*_*447 1

我有类似的问题。

文档(http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape)说:

<尺寸>

形状的大小。(...)

注意:默认情况下,形状会缩放到与此处定义的尺寸成比例的容器视图的大小。当您在 ImageView 中使用形状时,可以通过将 android:scaleType 设置为“center”来限制缩放。

如果我理解正确的话,这意味着“尺寸”标签不是用于设置尺寸而是用于设置比例。

  • 所以它说宽度/高​​度是整数,但你发布的内容听起来像是它们可能是百分比(0..1)或者与容器的尺寸(0..view.width)一样大?!或者你是说它有道理并且你知道它是如何工作的并且可以比文档更好地解释它?我不完全理解你的观点。无论哪种方式,它都可能需要一个错误来清除极其可怕的文档或修复代码,使其实际上是宽度和高度。 (4认同)