我必须在xml:
中制作它
目前我有这个:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:pixlui="http://schemas.android.com/apk/com.neopixl.pixlui"
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
layout="@layout/view_general_properties"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
<include
layout="@layout/view_property_interior_properties"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
</LinearLayout>
</ScrollView>
这是view_general_properties:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="12dp"
android:paddingRight="12dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="@string/general_properties"
android:textAllCaps="true"
android:textSize="@dimen/title_fontsize" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.66"
android:text="@string/total_living_area" />
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.33"
android:text="220 m²" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.66"
android:text="@string/number_of_fronts" />
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.33"
android:text="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.66"
android:text="@string/number_of_accommodation_units" />
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.33"
android:text="2" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.66"
android:text="@string/number_of_floors" />
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.33"
android:text="4" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.66"
android:text="@string/condition_of_the_building" />
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.33"
android:text="Uitstekend" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.66"
android:text="@string/frontage_street" />
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.33"
android:text="6m" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.66"
android:text="@string/year" />
<TextView
style="@style/property_detail_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.33"
android:text="1902" />
</LinearLayout>
</LinearLayout>
这很好用,但由于我有很多重复的代码,我想知道是否有更好的解决方案。
谢谢!
答案 0 :(得分:1)
有很多方法可以改进它。
平凡地说,每个TextView
的所有常见样式属性都可以拉出一个样式。请参阅Styles and Themes的开发人员文档。
我会更进一步,为您的内容的一行创建一个单独的布局资源文件,其中包含两个TextView
。省略文本值,但为每个id
分配TextView
值。
<强> my_list_item.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
style="@style/property_detail_label_style"
android:id="@+id/label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.66" />
<TextView
style="@style/property_detail_label_style"
android:id="@+id/value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.33" />
</LinearLayout>
然后,在您的代码中,为每个数据项手动为其中一个数据项充气,并将其动态添加到列表中。
View item;
for ( /* each data item in my list */ ) {
item = inflater.inflate(R.layout.my_list_item, containerView, true);
TextView label = (TextView) item.findViewById(R.id.label);
TextView value = (TextView) item.findViewById(R.id.value);
label.setText(dataItem.label);
value.setText(dataItem.value);
}
其中containerView
是保留列表的外部LinearLayout
。
答案 1 :(得分:1)
是的,有更好的方法。请改用ListView
。如果你不知道如何使用ListView
和Adapters
做谷歌,因为有数以千计的教程和示例。
我可以看到一些建议使用Style的答案,是的,这些都是很好的建议,但是对于这么长的列表,你会浪费内存并且滚动不会很顺利。 ListView
会更有效率。
我建议的具体细节是:
adapter
上的getViewTypeCount()
并返回2
。这意味着您的列表中有两种不同类型的视图。一个用于标题(粗体字母),另一个用于项目/价格。getItemViewType(int)
并返回0
如果它是标题位置(位置0,8等),否则返回1
。 getView()
上,您会检查if(getItemViewType(position) == 0)
做标题,else
执行该项目。TextView
,具有正确的样式bold
,大小,填充。LinearLayout
,orientation
水平,其中有两个TextView
,项目名称和值。ListView
tuto / example 答案 2 :(得分:0)
我将使用的解决方案是使用附加了数组适配器的列表视图来实现它。
在列表视图中,有很多方法可以包含子标题(ALGEMENE KENMERKEN,INTERIER)。
您将在适配器实现中获得可重用性。