Android自定义listview relativelayout定位问题

时间:2012-02-19 18:35:00

标签: android listview textview imageview relativelayout

我对Android编程和布局相对较新,并且一直坚持用文本和图标创建自定义列表视图。我已经检查并尝试了几个例子,并尝试用这些来制作我自己的列表视图。我现在处于这样的程度,以至于我不知道该怎么做才能让它像我想要的那样工作。

这是我当前的结果(第1行),第2行是 - 我丑陋的MsPaint版本 - 我喜欢它的样子。如果文本到达放大玻璃图标,则会被裁剪,其后有2个其他图标。

Current and wanted state

我尝试了很多不同的布局来实现这一点,并且我被告知并且读到我应该使用相对布局,因为那些具有更好的性能和其他东西(我现在不记得)。

[编辑] 更新和总结问题:我一直在困惑一点,但我认为我真正的问题是textview事先不知道我会放更多图标在放大玻璃的右边。这意味着它不会为这些图标“保留”任何空间,只占用所有可用空间,只留下一些用于放大图标。[/ Edit]

我有3个包含我的布局的xml文件。这是我的第一个文件,它只是我用屏幕启动屏幕的布局:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/LayoutWrap">

    <ListView
        android:id="@+id/my_listview"
        style="@style/List"/>
</LinearLayout>

'my_listview'的'xml-file'(我知道这是一个愚蠢的名字:)):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 style="@style/myListItem"
 android:id="@+id/list">


    <TextView
    android:id="@+id/my_item_title"
    style="@style/myItemName"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/my_item_detail"
    android:text="Name" />



    <ImageView
        android:id="@id/my_item_detail"
        style="@style/myImageItem"

        android:src="@drawable/ic_my_detail_unselected"
        android:contentDescription="Detail"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/my_item_delete"
    />


    <ImageView
        android:id="@id/my_item_delete"
        style="@style/myImageItem"

        android:src="@drawable/ic_my_delete_unselected"
        android:text="Delete my"
        android:layout_alignParentTop="true"
    />

        <ImageView
        android:id="@+id/my_item_copy"
        style="@style/myImageItem"

        android:src="@drawable/ic_my_update_unselected"
        android:text="Copy my"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@id/my_item_delete"
    />

</RelativeLayout>

在我的'styles.xml'中定义了样式,它们没有任何特殊属性。我认为唯一有趣的是我将文本设置为具有特定的textSize(也许是一个?android:LargeAppearance左右更好),并且我强迫它在一行上。

<?xml version="1.0" encoding="utf-8"?>
<resources>
        <style name="WrapBoth">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

    <style name="WrapHeight">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

        <style name="LayoutWrap">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">fill_parent</item>   
        <item name="android:orientation">vertical</item>        
    </style>

            <style name="List" parent="style/WrapHeight"/>

    <style name="myListItem">
        <item name="android:padding">5dp</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">?android:attr/listPreferredItemHeight</item>
    </style>

    <style name="myItemName" parent="style/WrapBoth">
        <item name="android:textSize">11sp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:ellipsize">end</item>
        <item name="android:lines">1</item>
        <item name="android:scrollHorizontally">true</item>
    </style>

    <style name="myImageItem" parent="style/WrapBoth">

    </style>
</resources>

我已经提前感谢任何帮助了!同时,我会处理我的'buttonListeners',我不指望那些会有太多麻烦:)

1 个答案:

答案 0 :(得分:2)

在我更习惯Android以及布局如何工作之后,我终于能够解决这个问题了。也许其他人可能偶然发现同样的问题,并可能从中得到一些有用的信息。

为了解决这个问题,我创建了一个内部有3个图像的relativelayout,并根据我的喜好定位图像。我给了我的relativelayout以下属性:

<RelativeLayout
        android:id="@id/options"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
         >

我希望留在左侧的textview,我给了它以下属性:

<TextView
    android:id="@+id/item_title"
    style="@style/ItemName"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:text="@string/dummy_title" 
    android:layout_toLeftOf="@+id/options"/>

我使用的样式,我保持相同。 使用这种方式,布局知道应该为3个图像保留什么空间。

这有点像数学,括号中的东西先行,而在android中,布局中的东西先行:)。