我有一个FrameLayout,对点击有涟漪效应。要做到这一点,我在FrameLayout上有这个标记:
android:foreground="?attr/selectableItemBackgroundBorderless"
问题是我收到的错误是:"无法解析符号'?attr / selectableItemBackgroundBorderless'" 。尽管有错误,我仍然可以运行该项目,FrameLayout具有我想要的效果。
但如果我尝试使用此标签:
android:foreground="?android:attr/selectableItemBackgroundBorderless"
我收到另一个错误。它说这个标签需要API级别21。
所以我的问题是,这样做的正确方法是什么?我应该继续使用无法解析符号的那个并忽略错误吗?有没有其他方法可以与另一个标签有类似的行为?
答案 0 :(得分:3)
?android:attr/selectableItemBackgroundBorderless
表示超出视野的涟漪。它将被利用,并受其限制, 具有非空背景的视图的最近父级。
selectableItemBackgroundBorderless
是引入的新属性
API级别21 。如果您想使用此功能,请打开 MODULE LEVEL
build.gradle
并设置
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "\\"
minSdkVersion 21
targetSdkVersion 27
确保在 google()
PROJECT LEVEL
部分添加 build.gradle
。
repositories {
....
google() //maven { url 'https://maven.google.com' }
}
<强>结构强>
<!-- Background drawable for borderless standalone items that need focus/pressed states. -->
<attr name="selectableItemBackgroundBorderless" format="reference" />
注意强>
如果您的代码是故意访问更新的API,那么您有 确保(例如,通过条件执行)该代码将仅 永远在支持的平台上调用,然后你可以注释你的 使用@TargetApi注释指定本地的类或方法 要应用的最小SDK,例如@TargetApi(11),这样检查 考虑11而不是您的清单文件的最小SDK作为 所需的API级别。
XML,
android:foreground="?android:attr/selectableItemBackgroundBorderless"
tools:targetApi="lollipop"
欲了解更多信息,
答案 1 :(得分:2)
从source code of support library appcompat-v7,您可以看到?attr/selectableItemBackgroundBorderless
是?android:attr/selectableItemBackgroundBorderless
的别名:
<item name="selectableItemBackgroundBorderless">?android:attr/selectableItemBackgroundBorderless</item>
从Android platform source code开始,您可以看到selectableItemBackgroundBorderless
是平台版本21中添加的资源:
<public type="attr" name="selectableItemBackgroundBorderless" id="0x0101045c" />
当您使用以下内容时:
android:foreground="?attr/selectableItemBackgroundBorderless"
您正在使用支持库提供的资源。在我看来,错误是因为Android Studio试图知道在21以下的api中找不到的原始资源。由于找不到原始资源,它将回退到支持库提供的资源。
答案 2 :(得分:0)
不要直接分配android:foreground
,而是让FrameLayout
使用样式:
<FrameLayout
style="@style/MyStyle"
....>
在res/values/styles.xml
上,添加以下内容:
<style name="MyStyle">
<item name="android:foreground">?attr/selectableItemBackgroundBorderless</item>
</style>
然后在res/values-v21/styles.xml
上添加带有android:
前缀的符号:
<style name="MyStyle">
<item name="android:foreground">?android:attr/selectableItemBackgroundBorderless</item>
</style>
答案 3 :(得分:0)
android:foreground="?android:attr/selectableItemBackgroundBorderless"
仅用于api 21或更高版本。如果您需要app-compat版本,则应删除android
部分。 (您也可以删除attr部分,这相当于不删除它)。
以下两种方法都适用于低于21的api,并且完全相同:
android:foreground="?attr/selectableItemBackgroundBorderless"
android:foreground="?selectableItemBackgroundBorderless"
答案 4 :(得分:0)
这对我很有帮助:
希望这会对你有所帮助。
答案 5 :(得分:-1)
将其设置为android:background="?android:attr/selectableItemBackground"