<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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)