Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-仅可在顶部绘制圆角_Android_Drawable_Rounded Corners - Fatal编程技术网

Android-仅可在顶部绘制圆角

Android-仅可在顶部绘制圆角,android,drawable,rounded-corners,Android,Drawable,Rounded Corners,我画了一个圆形的矩形作为背景: <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/white" /> <stroke android:width="1dp" android:color="@color/light_gray" /> <padding android:left="10dp" a

我画了一个圆形的矩形作为背景:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white" />
    <stroke android:width="1dp" android:color="@color/light_gray" />
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
    <corners android:radius="6dp" />
</shape>

正如预期的那样,这工作正常

现在,我想将其更改为仅围绕顶部拐角,因此我将其更改为:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white" />
    <stroke android:width="1dp" android:color="@color/light_gray" />
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
    <corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
             android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>


但是现在没有一个角是圆角,我得到了一个普通的矩形。我在这里遗漏了什么?

尝试给出以下值:

 <corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
         android:bottomLeftRadius="0.1dp" android:bottomRightRadius="0.1dp"/>

请注意,我已将
0dp
更改为
0.1dp


编辑:请参见下面的Aleks G以获得更清晰的版本

我尝试了您的代码并得到了一个顶部圆角按钮。我给的颜色是
@ffffff
和笔划是
#c0c0

试一试

  • 给android:bottomLeftRadius=“0.1dp”而不是0。如果它不起作用
  • 检查什么是可绘制的以及模拟器的分辨率。我在res下创建了一个可绘制文件夹并使用它。(hdpi,mdpi-ldpi)您拥有此XML的文件夹。 这是我的输出

  • 尝试这样做:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:bottom="-20dp" android:left="-20dp">
            <shape android:shape="rectangle">
                <solid android:color="@color/white" />
    
                <corners android:radius="20dp" />
            </shape>
        </item>
    </layer-list>
    
    
    
    似乎不适合设置不同的矩形角半径。因此,您可以使用此技巧。

    在此基础上,您可以制作一个只有一个圆角的
    可绘制的
    (本例中为左上角):

    
    
    请注意,上述
    可绘制
    在Android Studio预览版(2.0.0p7)中未正确显示。若要预览它,请创建另一个视图,并将其用作以下代码中的示例中的android:background=“@drawable/…”

        <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:top="10dp" android:bottom="-10dp"
            >
    
            <shape android:shape="rectangle">
                <solid android:color="@color/maincolor" />
    
                <corners
                    android:topLeftRadius="10dp"
                    android:topRightRadius="10dp"
                    android:bottomLeftRadius="0dp"
                    android:bottomRightRadius="0dp"
                />
            </shape>
    
        </item>
        </layer-list>
    
    
    
    您可能需要阅读此内容

    下面是一张便条


    注:每个角(最初)必须提供大于1的角半径,否则没有圆角。如果您希望特定的角点不被圆角,解决方法是使用android:radius将默认角点半径设置为大于1,然后使用您真正想要的值覆盖每个角点,提供零(“0dp”)不需要圆角的地方。

    在drawable上创建roung\u top\u corners.xml并复制以下代码

    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <corners
        android:topLeftRadius="22dp"
        android:topRightRadius="22dp"
        android:bottomLeftRadius="0dp"
        android:bottomRightRadius="0dp"
        />
    <gradient
        android:angle="180"
        android:startColor="#1d2b32"
        android:centerColor="#465059"
        android:endColor="#687079"
        android:type="linear" />
    <padding
        android:left="0dp"
        android:top="0dp"
        android:right="0dp"
        android:bottom="0dp"
        />
    <size
        android:width="270dp"
        android:height="60dp"
        /></shape>
    

    尝试完全删除这些属性

    android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"
    

    尝试使用
    materialshapedravable
    并在kotlin/java代码中对其进行配置

    val backgroundShapeModel = ShapeAppearanceModel.builder()
        .setTopLeftCorner(CornerFamily.ROUNDED, 16F.toPx)
        .setTopRightCorner(CornerFamily.ROUNDED, 16F.toPx)
        .build()
    textView.background = MaterialShapeDrawable(backgroundShapeModel).apply {
        fillColor = ColorStateList.valueOf(Color.GREEN)
    }
    

    附笔: 除了
    xml
    drawables提供的功能(填充颜色、笔划…)之外,
    MaterialShapeDrawable
    还支持:

  • cornerFamily
    分为两类:
    rounded
    cut
  • edgeTreatment
    TriangleEdgeTreatment
    OffsetEdgeTreatment
  • 不需要上下文和获取资源
  • ]


    bg.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="#FFFFFF"/>
        <corners android:topLeftRadius="24dp" android:topRightRadius="24dp"
            android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
    </shape>
    
    android:background="@drawable/bg"
    

    这确实不是一个解决方案,但我想我曾经遇到过类似的问题。将stoke增加到2像素有帮助,但你知道,这不是一个解决方案。这里有一个关于形状角的问题:这是什么android版本?我的应用程序必须在1.6版上运行,emulator 1.6也有问题。进一步研究后,我发现了一个更好的解决方案:
    -这会产生完美的方形底角,甚至没有任何圆角。然而,你的解决方案基本上是可行的。在给定位图的情况下,如何在代码中做到这一点?如何在其周围添加轮廓(又称笔划)?@Aleks G我认为没有必要指定
    android:radius=“1dp”
    @hmac这是必要的。阅读文档,说明得很清楚。@AleksG是的,文档是错误的,在三星10、安卓9上测试:“每个角落都必须(最初)提供大于1的角半径,否则不圆角。如果您希望不圆角特定角,解决方法是使用android:radius设置大于1的默认角半径,但然后覆盖“-不为真,我指定右下角、右上角、,左上角为零,左下角+ve和左下角是正确的曲线参见我自己的答案-对于不同的角有不同的半径是完全可以接受的。我尝试过这种方法,这是不可接受的,ide告诉它不适合有不同的RSDIU和忽略it@AleksG-当然。它在今天和当时一样重要(作为证据——我需要类似的东西)。你必须知道,随着时间的推移,一些做事的方式变得不受欢迎,可能需要用更现代的方式来取代。正如busylee提到的,IDE在定义不同的角半径时会出现问题,而本方法的情况并非如此。此外,由于这个问题是我在谷歌(iirc)上的第一次点击,所以我有理由更新它。不管怎样,我相信SO不会介意更多KB的代码…:)除非您希望在视图中添加填充,否则不需要项目的顶部和底部属性,但在其他情况下,这是可行的。如果您完整阅读问题,您会注意到这不起作用,这就是问题首先被问到的原因。有趣的是,在我的情况下,它起作用了:)
    <?xml version="1.0" encoding="UTF-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="#FFFFFF"/>
        <corners android:topLeftRadius="24dp" android:topRightRadius="24dp"
            android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
    </shape>
    
    android:background="@drawable/bg"