c# - 以编程方式在视图上添加/删除边框
问题描述
有没有一种简单的方法可以像在 iOS 中那样以编程方式在 Android 中设置 View / ViewGroup / RelativeLayout 的边框?
我在 Xamarin.Android 中使用 C# 工作。在 iOS 中,这很简单
View.Layer.BorderColor = X; View.Layer.BorderWidth = 2;
但是在搜索了许多站点和 Xamarin 文档之后,似乎没有一种简单的方法可以在 Android 中执行此操作。对我来说,上面的代码很简单(一两行代码),但知道 Android 想要让一切变得过于复杂,我什至会接受一个需要八九行代码的解决方案。
是的,我确实需要一个编程解决方案,而不是编辑 XML。
我发现的许多类似问题的答案都没有提供以编程方式进行的方法。
我发现的最接近的是这个Android add border to edit text programmatically。但我想知道有没有一种更简单的方法来做看起来很常用的事情,而不是创建一个完整的类来添加/删除视图中的边框?Android真的忽略了这样一个看似有用且常见的属性吗?还是我完全被误导了,对这么简单的事情完全视而不见?
解决方案
在drawable中创建2层列表。
- box_with_border.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#fff" />
</shape>
</item>
<item>
<shape>
<stroke
android:width="2dp"
android:color="#000" />
</shape>
</item>
</layer-list>
- box_without_border.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#fff" />
</shape>
</item>
</layer-list>
现在您可以为视图设置背景:
if (youWant) {
your_layout.setBackground(ContextCompat.getDrawable(getContext(), R.drawable.box_with_border));
} else {
your_layout.setBackground(ContextCompat.getDrawable(getContext(), R.drawable.box_without_border));
}
推荐阅读
- javascript - 如何使用 tensorflow JS 在 Javascript 中运行 UNet 分割模型?
- javascript - 如何将变量从 history.replace 传递给组件
- self-extracting - 我可以在 iexpress 自解压器中更新可执行文件的名称吗?
- authentication - .Net Core 身份在 .Net Core 5.0 中添加公司名称作为用户登录过程的一部分
- reactjs - 如何从 React Hooks Form 7.0 中的文本字段中排除特殊字符
- performance - 在 OWASP Benchmark 中生成安全工具之间比较的正确结果的问题
- installation - Openstack 的 Freezer 安装过程中的 Keystone 异常
- javascript - 突出显示重复的名称
- reactjs - 反应分页和搜索组件编号错误
- java - GWT 按钮栏工具栏在 Chrome 中显示为下拉菜单(其他浏览器有单独的按钮)