为啥在安卓手机上圆角不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥在安卓手机上圆角不起作用相关的知识,希望对你有一定的参考价值。

参考技术A 方法一 使用 drawable-mdpi

设置边框圆角可以在drawable-mdpi目录里定义一个xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#000000" />
<corners android:topLeftRadius="10dp"
android:topRightRadius="10dp"
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"/>
</shape>

解释:solid的表示填充颜色,为了简单,这里用的是黑色。
而corners则是表示圆角,注意的是这里bottomRightRadius是左下角而不是右下角,bottomLeftRadius右下角。
当然上面的效果也可以像下面一样设置,如下:

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

如果想引用这个xml,只需要@drawable/corners_bg.xml即可:

android:background="@drawable/corners_bg"

最后main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="#FFFFFF">
<RelativeLayout android:id="@+id/login_div"
android:layout_width="fill_parent" android:layout_height="150dip"
android:padding="15dip" android:layout_margin="15dip"
android:background="@drawable/corners_bg">
</RelativeLayout>
</LinearLayout>

方法二 Android使用 Shape 画边框线

1、布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:orientation="vertical" >

<!-- 表格布局 -->
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip" >
<!-- 表格布局:第一行 -->
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_top_corner_no_bottom_line"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="10dip"
android:text="姓名:" >
</TextView>
<EditText
android:id="@+id/bankingYourNameEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@null"
android:singleLine="true" >
</EditText>
</TableRow>
<!-- 表格布局:第二行 -->
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_no_corner_without_bottom"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="10dip"
android:text="联系电话:" >
</TextView>
<EditText
android:id="@+id/bankingContactTelEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@null"
android:inputType="phone"
android:singleLine="true" >
</EditText>
</TableRow>
<!-- 表格布局:第三行 -->
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_bottom_corner_no_top_line"
android:padding="10dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="10dip"
android:text="联系电话:" >
</TextView>
<EditText
android:id="@+id/bankingContactTelEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@null"
android:inputType="phone"
android:singleLine="true" >
</EditText>
</TableRow>
</TableLayout>

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Button" />

</LinearLayout>

2、表格布局中每个TableRow表示一行,TableRow中的每个基本控件都是一列,这是一个三行两列的布局

这里的表格背景是自定义的shape,下面分别看一下三个shape的代码。

shape_top_corner_no_bottom_line.xml文件:顶部带圆角 白色背景 灰色边框 无下边框 长方体

<?xml version="1.0" encoding="UTF-8"?>
<!-- 顶部带圆角 白色背景 灰色边框 无下边框 长方体 -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#FFFFFF" />
<corners android:topLeftRadius="10dp" android:topRightRadius="10dp"
android:bottomRightRadius="0.1dp" android:bottomLeftRadius="0.1dp" />
<stroke android:width="1dp" android:color="#ffa8abad" />
</shape>
</item>
<item android:top="1dp" android:left="1dp" android:right="1dp">
<shape>
<solid android:color="#FFFFFF" />
<corners android:topLeftRadius="10dp" android:topRightRadius="10dp"
android:bottomRightRadius="0.1dp" android:bottomLeftRadius="0.1dp" />
<stroke android:width="1dp" android:color="#ffffffff" />
</shape>
</item>
</layer-list>

3、shape_no_corner_without_bottom.xml文件:不带圆角 白色背景 灰色边框 无下边框 长方体

<?xml version="1.0" encoding="UTF-8"?>
<!-- 不带圆角 白色背景 灰色边框 无下边框 长方体 -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape>
<solid android:color="#FFFFFF" />
<stroke
android:width="1dp"
android:color="#ffa8abad" />
</shape>
</item>
<item
android:left="1dp"
android:right="1dp"
android:top="1dp">
<shape>
<solid android:color="#FFFFFF" />
<stroke
android:width="1dp"
android:color="#ffffffff" />
</shape>
</item>
</layer-list>

4、shape_bottom_corner_no_top_line.xml文件:底部圆角 白色背景 灰色边框 长方体

<?xml version="1.0" encoding="UTF-8"?>
<!-- 底部圆角 白色背景 灰色边框 长方体 -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="#FFFFFF" />
<corners android:topLeftRadius="0.1dp" android:topRightRadius="0.1dp"
android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" />
<stroke android:width="1dp" android:color="#ffa8abad" />
</shape>
</item>
<item android:top="1dp" android:bottom="1dp" android:left="1dp" android:right="1dp">
<shape>
<solid android:color="#FFFFFF" />
<corners android:topLeftRadius="0.1dp" android:topRightRadius="0.1dp"
android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp" />
<stroke android:width="1dp" android:color="#ffffffff" />
</shape>
</item>
</layer-list>

5、说明:

shape_top_corner_no_bottom_line.xml

shape_no_corner_without_bottom.xml

shape_bottom_corner_no_top_line.xml

以上三个文件都存放在 drawable 中。本回答被提问者采纳

为啥标记为@IBInspectable 的属性不起作用?

【中文标题】为啥标记为@IBInspectable 的属性不起作用?【英文标题】:Why properties tagged @IBInspectable is not working?为什么标记为@IBInspectable 的属性不起作用? 【发布时间】:2016-10-18 08:33:45 【问题描述】:

我在这里按照tutorial 创建了一个可检查和可设计的视图。我只想在UIView 中添加边框颜色、边框宽度和圆角边框功能。

我已经成功展示了这些属性。但不管我在情节提要上设置了什么,结果仍然就像他们不在那里一样。没有边框,即使我将边框设置为宽度为 2 且颜色为黑色。它没有在情节提要和运行时显示。我已将边框设置为 2 宽度,但在运行时,我在 didViewLoad 处打印边框宽度值,结果为 0。可能有什么问题?

@IBDesignable extension view: UIView 

    @IBInspectable var cornerRadius: CGFloat 
        get 
            return layer.cornerRadius
        
        set 
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        
    

    @IBInspectable var borderWidth: CGFloat 
        get 
            return layer.borderWidth;
        
        set 
            layer.borderWidth = borderWidth;
        
    

    @IBInspectable var borderColor: UIColor? 
        get 
            return UIColor(CGColor: layer.borderColor!);
        
        set 
            layer.borderColor = borderColor?.CGColor
        
    


这也不起作用:

@IBDesignable class BOView: UIView 

    @IBInspectable var cornerRadius: CGFloat 
        get 
            return layer.cornerRadius
        
        set 
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        
    

    @IBInspectable var borderWidth: CGFloat 
        get 
            return layer.borderWidth;
        
        set 
            layer.borderWidth = borderWidth;
        
    

    @IBInspectable var borderColor: UIColor? 
        get 
            return UIColor(CGColor: layer.borderColor!);
        
        set 
            layer.borderColor = borderColor?.CGColor
        
    


【问题讨论】:

你在 IB 中打开菜单 EditorAutomatically Refresh Views 了吗? @holex 该选项已打开。 【参考方案1】:

尝试使用 newValue 而不是实际值。

例如,

@IBInspectable var borderWidth: CGFloat 
    get 
        return layer.borderWidth
    
    set 
        layer.borderWidth = newValue
    

Chen,我确实更喜欢您这样做的方式,但也请注意,您可以直接从 Storyboard 中尝试做的事情,而无需使用 IBDesignable。您可以在用户定义的运行时属性中设置图层属性。

【讨论】:

你在发布之前检查过这个答案吗?有用吗? 哦哦哦原来是这样!是的,我需要使用newValue 而不是变量名。谢谢!!!!但是 IBDesignable 仍然不起作用......但这是一个很大的飞跃! 等等,IBDesignable 现在可以工作了!!我不知道为什么!也许我需要关闭并重新打开 Xcode。谢谢! 很高兴。你的扩展有效吗?它可能真的很方便。 @CarienvanZyl 是的!现在有一个全新的世界和可能性在我面前打开了哈哈。我必须实现控制器并运行它的日子已经一去不复返了,只是为了看看边框是什么样子的。我认为这个可检查和可设计的东西非常复杂,所以直到现在我才去了解它。哦,我离真相太远了,哈哈。

以上是关于为啥在安卓手机上圆角不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥标记为@IBInspectable 的属性不起作用?

在手机上获取当前位置,不起作用? [安卓]

为啥外部链接在构建后在 phonegap 应用程序上不起作用

Xcode UIImageView 圆角不起作用

为啥 `android:foreground` 属性不起作用?

自定义 UICollectionViewCell 中的圆角在 Swift 中不起作用