52

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

<shape android:shape="rectangle">
    <solid android:color="@color/orange"/>
    <size android:width="2dp"/>
</shape>

但是,当我将其分配给 EditText 的背景时,它只显示橙色背景而不是宽度为 2dp 的矩形。为什么设置大小不起作用?我想在左侧创建一个带有橙色矩形的透明可绘制对象。我也有这个包装在一个选择器中:

<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>

我试过增加高度只是为了看看它是否会改变大小。它没有。这就像它完全忽略了大小。怎么回事?

4

8 回答 8

33

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

<item android:id="@android:id/progress" android:gravity="center">
    <clip>
        <shape>
            <size android:height="2dp"/>
            <solid android:color="@color/my_color"/>
        </shape>
    </clip>
</item>
于 2018-07-09T17:37:25.093 回答
11

它可以与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>

使用布局片段

    <ImageView
            android:foreground="@drawable/list_new_dot"
            android:foregroundGravity="right|center_vertical"
            tools:src="@drawable/model_1_sm"
            />

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

于 2016-11-14T06:36:51.527 回答
9

Just to specify the user983447's answer - the size attribute does really mean a proportion. You should set the size for all shapes in your layer-list and it'll be used a as a proportion when scaling - like the layout_weight attribute of LinearLayout. So it's better to name it not a size but a weight

Below is a work-around how to implement top and bottom white lines without using the size attribute:

<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>
于 2013-02-11T04:13:29.723 回答
4

由于以下原因,我发现第一次 Androider 的 layer-list 非常狡猾。乍一看,大多数人会认为项目的顶部、底部、右侧、左侧属性是来自顶部、底部、右侧、左侧。其中值如下:

<item android:top="10dp">

将从相应容器的顶部为您提供 10dp 的起点。不是这种情况。将其视为顶部,底部,右侧,左侧。<item android:top="10dp">仍然会为您提供离顶部 10dp 的起点,但是当您想设置底部时会发生什么?

<item android:bottom="20dp">

这不会让您在距 TOP 20dp 处的底部,而是距容器底部 20dp 的底部。

因此,例如对于 100dp 的容器,如果您想要一个顶部边缘从 20dp 开始,底部边缘从 40dp 开始的矩形:

<item android:top="20" android:bottom="60dp">
于 2014-03-20T16:18:31.593 回答
1

shape 的 size 属性将提供 drawable.getIntrinsicWidth 和 getIntrinsicHeight 的值。

如果drawable的容器(例如ImageView,TextView)具有布局参数WRAP_CONTENT,那么如果drawable的drawingState改变,容器尺寸也会改变。

但是ImageView drawingState实现中的android框架中有一个错误

ImageView 仅通过 state_selected 上的可绘制尺寸更新/调整其尺寸,但不在 state_activated

于 2015-03-21T08:19:48.643 回答
1

我有类似的问题。

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

<尺寸>

形状的大小。(...)

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

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

于 2012-09-06T11:08:25.860 回答
1

当您将其用作背景时,形状的大小将被忽略View。当您通过以下方式显示它时,它将起作用ImageView

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#FF7700" />
    <size android:width="20dp" android:height="20dp"/>
</shape>

在您的布局 XML 中:

<!-- will have the size of 20dp x 20dp -->
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/my_shape"
    />
于 2021-03-03T14:26:58.123 回答
0

用了这个。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >

<stroke
    android:color="@color/lgray"
    android:width="1dip" />

<corners
    android:bottomLeftRadius="0dip"
    android:bottomRightRadius="0.1dip"
    android:topLeftRadius="0dip"
    android:topRightRadius="0.1dip" />

<solid android:color="@color/White" />

</shape>

把这个rectangle.xml放到 drawable.and 设置你的视图背景。

于 2013-02-11T04:29:14.267 回答