我对Android编程和布局相对较新,并且一直坚持用文本和图标创建自定义列表视图。我已经检查并尝试了几个例子,并尝试用这些来制作我自己的列表视图。我现在处于这样的程度,以至于我不知道该怎么做才能让它像我想要的那样工作。
这是我当前的结果(第1行),第2行是 - 我丑陋的MsPaint版本 - 我喜欢它的样子。如果文本到达放大玻璃图标,则会被裁剪,其后有2个其他图标。
我尝试了很多不同的布局来实现这一点,并且我被告知并且读到我应该使用相对布局,因为那些具有更好的性能和其他东西(我现在不记得)。
[编辑] 更新和总结问题:我一直在困惑一点,但我认为我真正的问题是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',我不指望那些会有太多麻烦:)
答案 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中,布局中的东西先行:)。