放置ImageView over Button android

放置ImageView over Button android,第1张

概述我试图使用RelativeLayout在一个Button上放置一个 ImageView.这是我的xml: <RelativeLayout android:layout_width="0dip" android:layout_height="match_parent" android:layout_mar 我试图使用relativeLayout在一个button上放置一个 ImageVIEw.这是我的xml:
<relativeLayout                androID:layout_wIDth="0dip"                androID:layout_height="match_parent"                androID:layout_margin="10dp"                androID:layout_weight="0.50" >                <button                    androID:ID="@+ID/btnFindDaysInBetween"                    androID:layout_wIDth="match_parent"                    androID:layout_height="match_parent"                    androID:background="@color/blue_500"                    androID:text="@string/dt_text_days" />                <ImageVIEw                    androID:ID="@+ID/imagevIEw_find_days_in_between"                    androID:layout_wIDth="wrap_content"                    androID:layout_height="wrap_content"                    androID:layout_centerInParent="true"                    androID:contentDescription="@string/empty"                    androID:src="@drawable/ic_check_circle_white" />            </relativeLayout>

这是图片截图:

您可以看到,ImageVIEw的src图像是不可见的.但是,如果我将背面的按钮更改为ImageVIEw,则可以看到顶部ImageVIEw的图像.请参考下面..

更改xml:

<relativeLayout                androID:layout_wIDth="0dip"                androID:layout_height="match_parent"                androID:layout_margin="10dp"                androID:layout_weight="0.50" >                <!--                 <button                    androID:ID="@+ID/btnFindDaysInBetween"                    androID:layout_wIDth="match_parent"                    androID:layout_height="match_parent"                    androID:background="@color/blue_500"                    androID:text="@string/dt_text_days" />                -->                <ImageVIEw                    androID:ID="@+ID/imagevIEw_find_days"                    androID:layout_wIDth="match_parent"                    androID:layout_height="match_parent"                    androID:layout_centerInParent="true"                    androID:contentDescription="@string/empty"                    androID:src="@drawable/ic_send_black" />                <ImageVIEw                    androID:ID="@+ID/imagevIEw_find_days_in_between"                    androID:layout_wIDth="wrap_content"                    androID:layout_height="wrap_content"                    androID:layout_centerInParent="true"                    androID:contentDescription="@string/empty"                    androID:src="@drawable/ic_check_circle_white" />            </relativeLayout>

更改了xml的屏幕截图:

在第一个布局中我做错了什么?

解决方法 原因其实很简单. :)我们在2D中陷入了思考,我们忽略了高程 – 在Z.

你的第一个布局没有错. button只是具有比ImageVIEw更高的高程 – 高达1dp.因此,无论你如何安排这两种观点,button都会上升.

有点证明:

一个按钮,默认情况下获取Widget.Material.button样式:

<!-- bordered ink button --><style name="Widget.Material.button">    <item name="background">@drawable/btn_default_material</item>    <item name="textAppearance">?attr/textAppearancebutton</item>    <item name="minHeight">48dip</item>    <item name="minWIDth">88dip</item>    <item name="stateListAnimator">@anim/button_state_List_anim_material</item>    <item name="focusable">true</item>    <item name="clickable">true</item>    <item name="gravity">center_vertical|center_horizontal</item></style>

引入此高程的属性是androID:stateListAnimator. StateListAnimator类似于StateListDrawable,并提供状态更改动画.完整的xml在这里:Link.但是这是按钮的基本状态:

<!-- base state --><item androID:state_enabled="true">    <set>        <objectAnimator androID:propertyname="translationZ"                        androID:duration="@integer/button_pressed_animation_duration"                        androID:valueto="0"                        androID:startDelay="@integer/button_pressed_animation_delay"                        androID:valueType="floatType"/>        <objectAnimator androID:propertyname="elevation"                        androID:duration="0"                        androID:valueto="@dimen/button_elevation_material"                        androID:valueType="floatType" />    </set></item>

您可以看到,按钮的高程值设置为@ dimen / button_elevation_material:

<dimen name="button_elevation_material">1dp</dimen>

这就是ImageVIEw最终在button后面.

那么,我们该怎么办?

一个直接的解决方案是将ImageVIEw的高程设置为相同的量 – 1dp.

另一种解决方案,需要一些工作,是删除button的高程,而不是改变ImageVIEw的.基于默认的StateListAnimator,我们可以创建我们自己的 – 并删除高程.然后,在您的res / values-v21 / styles.xml中,定义从Widget.Material.button继承的样式:

<style name="MyDepressedbuttonStyle" parent="androID:Widget.Material.button">    <item name="androID:stateListAnimator">@anim/customized_state_animator</item></style>

现在,在您的按钮上设置此样式:

<button        ....    .... />

编辑:

其实我们可以直接应用定制的StateListAnimator:

<button    androID:stateListAnimator="@anim/customized_state_animator"    ....    .... />

没有必要走风景线路!

总结

以上是内存溢出为你收集整理的放置ImageView over Button android全部内容,希望文章能够帮你解决放置ImageView over Button android所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1132187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存