将按钮放在图像视图底部线上

时间:2014-10-21 22:24:07

标签: android android-studio

我正在使用FrameLayout并希望按下这个按钮:

Sketch

如何在XML中执行此操作?按钮需要始终位于图像视图的底部。

这是我的xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:adjustViewBounds="true"
            android:scaleType="fitCenter"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            android:layout_centerInParent="true" />

</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

我相信在RelativeLayout中可以更容易地完成这个

<RelativeLayout ...>
    <ImageView (image) ...>
    <Button (button)
       android:layout_alignParentBottom="true"
       android:layout_centerInParent="true" />
</RelativeLayout>

在图像中添加少量填充也应该达到与底部重叠的效果。 有了这个,您应该可以轻松地将按钮放在您想要的位置。

这是一个代码的示例,该代码正在投入使用并处理我编写的测试应用程序:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="200dp">
<ImageView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:src="@drawable/login_logo"
    android:paddingEnd="0dp"
    android:paddingStart="0dp"
    android:paddingBottom="15dp" />
<Button
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    android:layout_centerInParent="true" />
</RelativeLayout>

Here's一张图片显示在行动中,抱歉我使用的图像不太理想。

答案 1 :(得分:0)

在android(pre Lollipop)中没有办法自然地做到这一点。我的建议是诱使用户认为你在另一个视图中错开了一个视图。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/full_header"
    android:layout_width="match_parent"
    android:layout_height="148"
    android:clipChildren="false">
    <ImageView
        android:id="@+id/background_image"
        android:layout_width="wrap_content"
        android:layout_height="120dp"
        android:contentDescription="@string/background_image_contentdescription"
        android:adjustViewBounds="true"
        android:layout_alignParentTop="true"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_alignParentBottom="true">
    </Button>

</RelativeLayout>

然后在我设置此视图的代码中。

//The large view is an Image with a fixed height of 120dp
int bgImageHeight = FSUtils.dpToPixels(120, getResources().getDisplayMetrics());
//The small view is a Relative Layout with a fixed height of 56 dp.
int dataLeafHeight = FSUtils.dpToPixels(56, getResources().getDisplayMetrics());
//The full header contains the two and its minimum height is set
// to the height of the large image + half the height of the small view
full_header.setMinimumHeight(bgImageHeight + dataLeafHeight/2);

然后使用对齐父底部并对齐父顶部将视图拉到顶部和底部,使较小的视图错开大背景视图的边界。

我相信在新的操作系统LolliPop中有一种方法可以做到这一点,但我还没有尝试过。也许其他人可以参与其中。

我希望这会有所帮助。 快乐编码