4

我想让一个TextView(显示计数)悬停在 ActionBar 中的图标上。我所做的是有一个RelativeLayout,为其设置一个背景,然后将其TextView放入该布局中并用边距拧紧直到它适合,但是一旦文本长度发生变化,它就会被破坏。设置背景TextView也不是很好,因为我无法将文本与图标相关联。

这是我的 XML:

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

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:background="@drawable/cart" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:layout_marginTop="5dp"      android:layout_marginLeft="43dp"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout> </RelativeLayout>

这是一个屏幕截图,向您展示我的意思:

在此处输入图像描述

是否有一种无压力的方式,也许是一个库,可以让我设置一个TextViewover aDrawable以便 TextView 始终居中/定位?

4

3 回答 3

3

在 TextView 上设置背景也不是很好,因为我无法相对于图标定位文本。

实际上,您可以相对于图标定位文本。您需要将购物车图标和数字徽章图标分开为单独的图像,并单独布置它们。不久前我不得不自己做这个,我用一个RelativeLayout, 一个ImageView购物车图标和TextView一个 9 补丁“徽章”作为背景的数字。

诀窍是将您的号码与购物车图标TextView左侧底部对齐,ImageView然后使用左右边距将您的号码徽章推到购物车图标顶部右侧。这样,数字徽章始终基于您的购物车图标。

此外,将gravity您的设置TextViewcenter,以便随着数字变宽,文本的相对位置大致相同。最后,使用paddingTextView来控制数字边缘和“徽章”9 补丁边缘之间的差距。

这是我的实现的一个片段(我已经编辑了其中的一些):

   <RelativeLayout
        android:id="@+id/cartButton"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent" >

        <ImageView
            android:id="@+id/cartIconImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:src="@drawable/ic_menu_cart" />

        <TextView
            android:id="@+id/cartBadge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/cartIconImageView"
            android:layout_alignLeft="@+id/cartIconImageView"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="9dp"
            android:background="@drawable/state_list_cart_badge"
            android:gravity="center"
            android:includeFontPadding="false"
            android:lines="1"
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:text="7" />
    </RelativeLayout>

这就是它的样子:

在此处输入图像描述

在此处输入图像描述

于 2013-03-05T15:57:30.357 回答
0

我只会使用 TextView,并设置一个 9 补丁作为背景:

9 补丁文件

您可能不得不玩弄它(我只是在一两分钟内完成了它),但是图像中最右下角的东西就是您想要的。这将比处理两个视图更加一致。

于 2013-03-05T15:53:23.490 回答
0

使用框架布局。它总是被称为无用,但如果你问我,将一个视图放在另一个视图之上是完美的。

报价

子视图绘制在堆栈中,最近添加的子视图在顶部。FrameLayout 的大小是其最大子项(加上填充)的大小,可见与否(如果 FrameLayout 的父项允许)。只有当 setConsiderGoneChildrenWhenMeasuring() 设置为 true 时,才会使用 GONE 的视图来调整大小。

于 2013-03-05T15:20:50.963 回答