放置ImageView over Button android

前端之家收集整理的这篇文章主要介绍了放置ImageView over Button android前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用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
    style="@style/MyDepressedButtonStyle"
    ....
    .... />

编辑:

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

<Button
    android:stateListAnimator="@anim/customized_state_animator"
    ....
    .... />

没有必要走风景线路!

猜你在找的Android相关文章