填充不会影响XML布局中的<shape>

Lyu*_*tko 72 user-interface android

我试图<shape>在XML文件/布局中声明填充.但无论我设置什么,没有任何与填充相关的变化.如果我修改任何其他属性,我会在UI上看到效果.但它不适用于填充.你能否就可能出现这种情况的原因提出建议?

这是我试图设计的XML Shape:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="rectangle">

    <stroke android:width="1dp" 
            android:color="#ffffff" 
            android:dashWidth="2dp"/>

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

    <corners android:radius="11dp"/>

    <padding android:left="1dp" 
             android:top="20dp"
             android:right="20dp" 
             android:bottom="2dp"/>
 </shape>
Run Code Online (Sandbox Code Playgroud)

Lyu*_*tko 103

我终于用填充解决了我的问题.

所以这里的填充对形状没有影响.而不是这个,你将不得不在其他可用的drawable中应用填充.所以,我有一个使用形状的drawable,我在那里做:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/shape_below"/>
   <item android:top="10px" android:right="10px" android:drawable="@drawable/shape_cover"/>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

所以,正如你在第二部分中看到的那样,<item>我设置了填充(顶部和右侧).一切都行之有效.

谢谢.

  • 这个答案在七年之后似乎是正确的.究竟是什么`<shape> <padding>`*for*? (3认同)
  • 我认为Lyubomyr所说的是做这样的事情,这对我有用,但是角落总是有一个不透明的白色背景,导致显示问题(抱歉评论中的格式!):<layer-list xmlns:android =" http://schemas.android.com/apk/res/android"> <item> <shape android:shape ="rectangle"> <size android:width ="0dp"android:height ="45dp"android:color = "@android:color/transparent"/> </ shape> </ item> <item android:top ="0dp"android:right ="0dp"android:bottom ="0dp"android:left ="0dp"android: drawable ="@ drawable/button_blue_shape"/> </ layer-list> (2认同)

The*_*eIT 62

正如一些评论所提到的,最好的方法是将<shape>一个<item>元素包装起来并在那里设置填充.但是,有其他选项可在下面的链接中详细说明.例如

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="8dp"
        android:right="8dp"
        android:top="8dp"
        android:bottom="8dp">

        <shape android:shape="rectangle">
            ...
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

根据您的需要,您可以使用以下任何可绘制类型,而不是使用图层列表:

  • 层列表
  • 选择
  • 级列表
  • 过渡

有关可用drawable类型的更多信息,请参阅此android文档

资料来源:

  • 我的意思是,给出一个示例,可以在不使用版本的情况下复制和运行更好,但是在这种情况下,&lt;item&gt;不会得到解决(因为它应该位于&lt;layer-list&gt;内部) (3认同)
  • @ user924我明白您的意思了,非常感谢您指出问题并帮助改善答案。我已经更新了代码示例,并添加了有关可用可绘制类型的注释 (2认同)

Yah*_*hel 18

Lyobomyr的答案有效,但这里应用了相同的解决方案,但没有创建新drawable的开销,因此最大限度地减少了文件的混乱:

/sf/answers/251228351/

在上面的SO答案上通过anon复制/粘贴anwser:

<item android:left="6dp"
      android:right="6dp">

    <shape android:shape="rectangle">
        <gradient android:startColor="#ccd0d3"
                  android:centerColor="#b6babd"
                  android:endColor="#ccd0d3"
                  android:height="1px"
                  android:angle="0"/>
    </shape>
</item>
Run Code Online (Sandbox Code Playgroud)


小智 11

你可以试试插图:

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="2dp"
    android:insetLeft="1dp"
    android:insetRight="20dp"
    android:insetTop="20dp">

    <shape android:shape="rectangle">

        <stroke
            android:width="1dp"
            android:color="#ffffff"
            android:dashWidth="2dp" />

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

        <corners android:radius="11dp" />
    </shape>

</inset>
Run Code Online (Sandbox Code Playgroud)


小智 6

我这样解决了这个问题:

<shape android:shape="oval"  >
    <stroke android:width="4dp" android:color="@android:color/transparent" />
    <solid android:color="@color/colorAccent" />
</shape>
Run Code Online (Sandbox Code Playgroud)

只是添加了一个透明的笔触.