- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个针对 android Lollipop 及以上版本的 Android 应用程序,我研究了海拔属性以在元素(即按钮、卡片和底部导航 View )下实现阴影。
我面临的问题是,当更改 XML 中的 android:elevation
值时,阴影大小不受影响。我尝试过并阅读过的内容:
关于代码,您可以在下面找到我的按钮样式和 fragment 的布局。
按钮样式
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:app="http://schemas.android.com/apk/res-auto">
<style name="Search" parent="@android:style/Widget.Button">
<item name="android:gravity">center_vertical|start</item>
<item name="android:textColor">@color/lightText</item>
<item name="android:textSize">@dimen/main_search_textSize</item>
<item name="android:background">@drawable/main_search</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:text">@string/search</item>
<item name="android:elevation">@dimen/main_search_elevation</item>
<item name="android:drawableStart">@drawable/ic_main_search</item>
<item name="android:paddingLeft">@dimen/main_search_padding</item>
<item name="android:paddingRight">@dimen/main_search_padding</item>
<item name="android:drawablePadding">@dimen/main_search_padding</item>
</style>
</resources>
fragment 布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingStart="@dimen/activity_horizontal_margin"
android:paddingEnd="@dimen/activity_horizontal_margin"
android:background="@color/lightBackground"
android:clipToPadding="false">
<androidx.appcompat.widget.AppCompatButton
style="@style/Search"
android:layout_width="match_parent"
android:layout_height="@dimen/main_search_height"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
dimens.xml
<resources>
<dimen name="activity_horizontal_margin">24dp</dimen>
<dimen name="activity_vertical_margin">24dp</dimen>
<dimen name="main_nav_icon_padding">6dp</dimen>
<dimen name="main_search_height">54dp</dimen>
<dimen name="main_search_marginTop">72dp</dimen>
<dimen name="main_search_elevation">24dp</dimen>
<dimen name="main_search_padding">16dp</dimen>
<dimen name="main_search_textSize">20sp</dimen>
</resources>
这就是我得到的(无论海拔属性是什么):
请注意,长按按钮时阴影确实会发生变化,并且不会以任何方式剪切。
因此,知道问题是什么吗?
最佳答案
嘿,你的问题看起来非常有用,所以我决定尝试一下。希望这对您有所帮助,如果有人有更好的方法,请发布。
首先,我认为主要问题是您使用的按钮样式有一些 StateListAnimator它控制按钮的高度,因此无论您将什么值设置为高度,它都会被覆盖。最简单的解决方案是简单地添加
<item name="android:stateListAnimator">@null</item>
到您的自定义“搜索”样式,现在该按钮将显示您使用 <item name="android:elevation">@dimen/main_search_elevation</item>
设置的海拔高度风格相同。
但这就像一个静态 View ,它会给你一个提升的外观,但当你点击或长按等时没有很酷的动画变化。
为了获得这些动画,您需要使用 ObjectAnimator 创建自定义 StateListAnimator 。我创建了一个作为示例。创建android资源目录animator
并添加一个 xml 文件,您将在其中编写所需的自定义动画。
这是我创建的custom_animator.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--For when your button is pressed-->
<item
android:state_enabled="true"
android:state_pressed="true">
<set>
<objectAnimator
android:duration="300"
android:propertyName="translationZ"
android:valueTo="12dp"
android:valueType="floatType" />
<objectAnimator
android:duration="300"
android:propertyName="elevation"
android:valueTo="12dp"
android:valueType="floatType" />
</set>
</item>
<!--For when your button is in its normal state-->
<item android:state_enabled="true">
<set>
<objectAnimator
android:duration="300"
android:propertyName="translationZ"
android:valueTo="4dp"
android:valueType="floatType" />
<objectAnimator
android:duration="300"
android:propertyName="elevation"
android:valueTo="4dp"
android:valueType="floatType" />
</set>
</item>
</selector>
您需要根据您的要求设置按钮处于基本状态和按下时的自定义尺寸。我利用了4dp
和12dp
分别,因为它看起来绰绰有余
就是这样,现在您只需将其作为 stateListAnimator 添加到您的样式中
<item name="android:stateListAnimator">@animator/custom_animator</item>
它应该可以工作。请注意,在这种情况下再次android:elevation
不起作用,只有动画师中定义的值才会反射(reflect)。所以你可以删除<item name="android:elevation">@dimen/main_search_elevation</item>
因为不需要它。
引用了medium上的一些博客和SO上的其他帖子,以了解这一切是如何运作的。尝试一下,让我们知道它是否适合您。
关于Android - 更改高度时阴影大小不受影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60332900/
我每天运行命令将新记录插入 BigQuery 表,并想记录每天插入的记录数。 我创建了一个 QueryJob包含 SELECT 查询和 destination 表的对象。我将 write_dispos
当您登录受密码保护的页面时,WordPress 会设置一个类似于 wp-postpass_hash 的 cookie。 这个 cookie 似乎永远存在。我希望能够为用户提供“注销”链接。如果我不知道
我正在用 C++ 设计一个公共(public) API,我相信我想保留 C++ 属性函数样式约定,它们看起来像 int& Value() 和 const int& Value() const 而不是按
我正在构建一个使用 jQuery 图片库的网站。你可以看一个例子 here . 出于某种原因,当画廊更改图像时,或者当您手动更改图像时,页面高度似乎因为需要更好的词而“闪烁”。新图像似乎增加了页面高度
我正在尝试使用 CSS3 实现一个简单的 3D 照片库。它在 IE10+ 浏览器上运行良好,但在最新版本的 chrome 上有一个小错误,即单击时按钮消失。谁能告诉我如何解决这个问题?提前谢谢你。 w
我想知道为什么其中一些程序会抛出段错误,而另一些则不会。 这个程序抛出一个段错误: #include int main(){ int ar[2096263]; printf("asd
今天我移植了我的旧内存基准测试 从 Borland C++ builder 5.0 到 BDS2006 Turbo C++,发现奇怪的事情。 BCB5 的 exe 运行正常且稳定 来自 BDS2006
下面是我的代码,用于解决 PE 问题 7(“找到第 10001 个素数”): #include using namespace std; bool isPrime(int n, int primes
我有两个 float 元素,右边和左边。 它们的父元素都是 text-align: center, margin: auto: 1. text 999 ' style='curso
我正在为我的 UI 元素制作一个简单的动画。 我有一个动画组件,它有 2 个不同的动画 - ZoomIn 和 ZoomOut。 每当需要在屏幕上显示 UI 元素(例如按钮)时,就会显示这些动画。 我通
我正在使用 .net 3.5 和 vb.net。我对下面提到的每种加密的内部工作知之甚少。我只使用 .net 类库中提供的类。 我有一段信息已经用 TripleDes 加密,然后是 Rijndael,
我有一个关于正确设计 php 文件及其在服务器上的存储的一般性问题。 问题是这样的:我将一个 php 对象的函数拆分到不同的 php 文件中,例如: 文件 1 AndroidFlashCard.php
我在地址表单输入上有自动完成功能。当用户点击建议时,州和邮政编码信息会自动填充。cp_state 是带有状态名称下拉列表的选择框,而cp_zipcode 是邮政编码的输入文本。 我使用下面的 java
我试图按顺序选择记录,但随机限制。 SELECT * FROM tm_winners WHERE paid_out=0 ORDER BY DESC LIMIT RAND(4,8) 但是,我似乎无法随机
我有一张这样的表,我想选取 20 位 HitTest 门的歌手并按字母顺序对他们(这 20 位歌手)进行排序。 id name hit --------------
我正在尝试使用受风影响的雨粒子,也就是 physicsWorld 重力。 我可以看到重力确实对我的 SKSpriteNode 有影响,但我无法对 SKEmitterNode 产生相同的影响。 我只是想
我有一个问题,我在网站加载时调用淡入,但由于 css 过渡效果,元素变为完全不透明,立即淡出然后淡入,我试图找到解决这个问题的方法,因为它看起来很糟糕 jQuery $(window).on("loa
我定义了一个容器元素,包含一个float div和一个ul,并且 ul 元素包含一些 float li 元素。我想清除 ul 的 float ,但 ul 的高度受其 float 兄弟元素的影响。这是
我想使用一项服务。我 100% 确信该服务可以正常工作。 服务电话 public void add(User user) { ConnectionRequest con = new Connectio
如果您在桌面/PC 上访问某人的 instagram 页面,单击搜索栏时,它会向左浮动,然后可以输入文本进行搜索。当搜索字段中没有文本时,搜索图标和“搜索”占位符会回到原来的中心位置。 我假设 jav
我是一名优秀的程序员,十分优秀!