android - 为线性布局设置xml背景并显示其按下效果
问题描述
我想将以下 xml 形状设置为我的线性布局背景:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<stroke
android:width="2dp"
android:color="#D50000">
</stroke>
<solid
android:color="@android:color/transparent">
</solid>
</shape>
而且我还想通过这几行代码来展示新闻效果:
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:background="?android:selectableItemBackground"
但是如您所知,不可能有两个background
视图。那么,解决方案是什么?
解决方案
试试这个:
<LinearLayout
android:layout_margin="16dp"
app:layout_constraintTop_toTopOf="parent"
android:background="@drawable/ll_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:onClick="doSomething"
android:padding="8dp"
android:weightSum="3">
<TextView
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Greeting" />
<TextView
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout>
然后在drawable/文件夹中添加:
button_normal.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<stroke
android:width="2dp"
android:color="#D50000">
</stroke>
</shape>
button_pressed.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid
android:color="#D50000">
</solid>
<stroke android:color="#D50000" android:width="2dp"/>
</shape>
然后创建 ll_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/button_pressed"/>
<item android:drawable="@drawable/button_normal"/>
</selector>
最后为波纹创建drawable-v21文件夹并添加ll_background.xml:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#D50000">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/white" />
<stroke
android:color="#D50000"
android:width="1dp" />
</shape>
</item>
</ripple>
前三个文件(button_normal.xml、button_pressed.xml 和 ll_background.xml)将用于 api < 21,而第 4 个(ll_background.xml)纹波将在所有其他设备上,包括 api 21 及更高版本。
祝你好运,编码愉快!
推荐阅读
- grpc - 当某些上游无法访问时,如何将特使代理配置为故障转移
- swift - 最具体的通用函数未调用
- java - Mapstruct java.util.Stack 转换
- python - Matplotlib:用垂直箭头和居中文本注释图
- r - 在 R 中创建临时数据框
- angularjs - 有没有办法在 AngularJS 中对简单的指令声明进行单元测试?(无链接功能)
- asp.net-mvc - 使用join时如何在linq中选择*
- d3.js - d3 beeswarm chart - 修改为金字塔形堆叠
- javascript - 类型错误:_co.post 未定义
- google-apps-script - urlfetch 并不总是在 url 中加载查询