3

我正在尝试偏移一个按钮并将其位置设置为使其看起来悬挂在其他元素上。我正在寻找的可以在这张图片中看到......注意图片按钮,它是我的 xml 中的 id ibLoginButton,红色箭头指向的地方:

在此处输入图像描述

这是我的布局的 xml,但我不知道如何使 ibLoginButton 具有这种效果。我需要以编程方式执行此操作吗?如果是这样,怎么做?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/db1_root"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <RelativeLayout
        style="@style/TitleBar"
        android:layout_height="54dp">
        <ImageView
            android:id="@+id/ivLoginPicture"
            android:contentDescription="@string/description_logo"
            android:src="@drawable/MDSLogoForLoginTrans"
            android:background="#ffffffff"
            android:layout_width="32dp"
            android:layout_height="44dp"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_centerVertical="true" />
        <TextView
            android:id="@+id/tvLoginName"
            android:text="Dr. Dentist"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:layout_width="230.5dp"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/ivLoginPicture"
            android:layout_centerVertical="true" />
        <ImageButton
            android:id="@+id/ibLogout"
            android:src="@drawable/logoutButton"
            android:layout_width="80dp"
            android:layout_height="38dp"
            android:layout_gravity="center_vertical"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:scaleType="fitXY"
            android:paddingTop="0dp"
            android:paddingRight="0dp"
            android:paddingBottom="0dp"
            android:paddingLeft="0dp" />
        <ImageButton
            android:src="@android:drawable/ic_menu_gallery"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:id="@+id/ibLoginButton"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
    </RelativeLayout>
    <LinearLayout
        android:id="@+id/HomePage"
        android:layout_weight="1"
        android:background="@drawable/home_background"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <GridView
            android:id="@+id/Grid"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:columnWidth="90dp"
            android:numColumns="auto_fit"
            android:listSelector="@android:color/transparent"
            android:verticalSpacing="10dp"
            android:horizontalSpacing="10dp"
            android:stretchMode="columnWidth"
            android:gravity="center"
            android:scrollbars="vertical" />
    </LinearLayout>
    <WebView
        android:layout_width="fill_parent"
        android:layout_height="100dip"
        android:layout_alignParentBottom="true"
        android:background="@drawable/gradientNews"
        android:id="@+id/webView1" />
</LinearLayout>

任何有Android布局知识的人请阐明一下!我难住了。

谢谢您的帮助。

4

3 回答 3

6

几个需要做的改变

  • 需要把顶部LinearLayout变成一个RelativeLayout.
  • 需要将ibLoginButton按钮移到其外部RelativeLayout
  • ibLoginButton需要在它覆盖的两个区域之后,因为RelativeLayout's 底部的项目被绘制在顶部。

完整的示例代码将为您提供所需的内容(在 Eclipse 的图形布局预览中看起来不错)。

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

    <RelativeLayout
        style="@style/TitleBar"
        android:id="@+id/first_relative"
        android:layout_width="wrap_content"
        android:layout_height="54dp" >

        <ImageView
            android:id="@+id/ivLoginPicture"
            android:contentDescription="@string/description_logo"
            android:src="@drawable/MDSLogoForLoginTrans"
            android:background="#ffffffff"
            android:layout_width="32dp"
            android:layout_height="44dp"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_centerVertical="true" />
        <ImageButton
            android:id="@+id/ibLogout"
            android:src="@drawable/logoutButton"
            android:layout_width="80dp"
            android:layout_height="38dp"
            android:layout_gravity="center_vertical"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:scaleType="fitXY"
            android:paddingTop="0dp"
            android:paddingRight="0dp"
            android:paddingBottom="0dp"
            android:paddingLeft="0dp" />

        <TextView
            android:id="@+id/tvLoginName"
            android:layout_width="230.5dp"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/ibLogout"
            android:text="Dr. Dentist"
            android:textAppearance="?android:attr/textAppearanceMedium" />

    </RelativeLayout>
    <LinearLayout
        android:id="@+id/HomePage"
        android:layout_weight="1"
        android:background="@drawable/home_background"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/first_relative">

        <GridView
            android:id="@+id/Grid"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:columnWidth="90dp"
            android:gravity="center"
            android:horizontalSpacing="10dp"
            android:listSelector="@android:color/transparent"
            android:numColumns="auto_fit"
            android:scrollbars="vertical"
            android:stretchMode="columnWidth"
            android:verticalSpacing="10dp" >
        </GridView>

    </LinearLayout>
    <WebView
        android:layout_width="fill_parent"
        android:layout_height="100dip"
        android:layout_alignParentBottom="true"
        android:background="@drawable/gradientNews"
        android:id="@+id/webView1" />

    <ImageButton
        android:id="@+id/ibLoginButton"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="22dp"
        android:src="@android:drawable/ic_menu_gallery" />

</RelativeLayout>

顺便说一句,应该可以只使用一个相对布局。出于性能原因,使用最少数量的容器是最佳实践。

于 2013-02-05T15:33:24.020 回答
1

尝试在标题栏和主页之间放置

<View android:layout_width="40dp" 
      android:layout_height="40dp" 
      layout_gravity="center_horizontally" 
      layout_margin_top="-20dp" background="ef0"/>

这里的想法是负边距

于 2013-02-05T15:31:01.790 回答
1

水平居中,然后调整边距。你知道 topbar 的高度,你可以设置 44 的上边距 - 图像高度的一半

于 2013-02-05T15:32:08.760 回答