我有一个我需要完整滚动的布局。布局包含一个列表视图底部,这导致一些不和谐。这是发生了什么:
所以你可以看到底部滚动在它自己的小世界中,我需要禁用它,以便它增长并扩展整个布局以进行滚动。我已经尝试将它全部封装在<scrollview><linearlayout>mystuff</linearlayout></scrollview>
中,但无济于事。我尝试过使用"match_parent"
和"wrap_content"
layout_heights
的无限组合。我真的需要那个listview向外扩展,而不是把自己放在自己的滚动世界里。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TableRow>
<TableLayout android:layout_span="2"
android:layout_width="fill_parent"
android:layout_weight="1">
<TableRow android:gravity="center">
<Button android:id="@+id/vin_btn"
android:width="@dimen/inb_btn_w"
android:height="@dimen/inb_btn_h"
android:text="@string/inb_vin_btn"
android:textSize="@dimen/inb_txt_sz" />
<Button android:id="@+id/clear_btn"
android:width="@dimen/inb_btn_w"
android:height="@dimen/inb_btn_h"
android:text="@string/inb_sc_btn"
android:textSize="@dimen/inb_txt_sz" />
<Button android:id="@+id/transmit_btn"
android:width="@dimen/inb_btn_w"
android:height="@dimen/inb_btn_h"
android:text="@string/inb_tr_btn"
android:textSize="@dimen/inb_txt_sz"/>
</TableRow>
</TableLayout>
</TableRow>
<TableRow android:gravity="center_vertical"
android:layout_width="fill_parent">
<TextView
android:gravity="right"
android:id="@+id/text_cust"
android:textSize="@dimen/inb_txt_sz"
android:text="@string/inb_cust"/>
<Spinner
android:layout_width="fill_parent"
android:layout_weight="1"
android:id="@+id/cust_spn"/>
</TableRow>
<TableRow android:layout_width="fill_parent">
<TextView
android:gravity="right"
android:id="@+id/text_drv"
android:textSize="@dimen/inb_txt_sz"
android:text="@string/inb_drv"/>
<EditText
android:id="@+id/drv_in"
android:inputType="number"
android:layout_width="fill_parent"
android:layout_weight="1"
android:singleLine="true"/>
</TableRow>
<TableRow android:gravity="center_vertical">
<TextView
android:gravity="right"
android:id="@+id/text_prd"
android:textSize="@dimen/inb_txt_sz"
android:text="@string/inb_prd"/>
<Spinner
android:id="@+id/prd_spn"
android:layout_width="fill_parent"
android:layout_weight="1"/>
</TableRow>
<TableRow android:gravity="center_vertical">
<TextView
android:gravity="right"
android:id="@+id/text_scale"
android:textSize="@dimen/inb_txt_sz"
android:text="@string/inb_scale"/>
<Spinner
android:id="@+id/scale_spn"
android:layout_width="fill_parent"
android:layout_weight="1"/>
</TableRow>
<TableRow android:gravity="center_vertical">
<TextView
android:gravity="right"
android:id="@+id/text_dir"
android:textSize="@dimen/inb_txt_sz"
android:text="@string/inb_dir"/>
<Spinner
android:id="@+id/dir_spn"
android:layout_width="fill_parent"
android:layout_weight="1"/>
</TableRow>
<TableRow>
<TextView
android:gravity="right"
android:id="@+id/text_make"
android:textSize="@dimen/inb_txt_sz"
android:text="@string/inb_make"/>
<EditText
android:id="@+id/make_in"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_weight="1"/>
</TableRow>
<TableRow>
<TextView
android:gravity="right"
android:id="@+id/text_tag"
android:textSize="@dimen/inb_txt_sz"
android:text="@string/inb_tag"/>
<EditText
android:id="@+id/tag_in"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_weight="1"/>
</TableRow>
</TableLayout>
<ListView android:id="@+id/vin_list"
android:isScrollContainer="false"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_width="match_parent" />
</LinearLayout>
行布局定义如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="4dip">
<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_vertical|left">
<TableRow>
<TextView android:id="@+id/vin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
</TableRow>
<TableRow>
<TextView android:id="@+id/desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"/>
</TableRow>
</TableLayout>
</LinearLayout>
答案 0 :(得分:5)
首先,为您的布局添加一个ScrollView作为根项目,它允许您在布局中的所有项目之间滚动(对于小屏幕手机上的现有TableLayout,它是必要的。)
然后用垂直的LinearLayout替换ListView,并使用类似的方法手动为所需的行充气:
LinearLayout llContainer = (LinearLayout) findViewById(R.id.yourBottomLinearLayout);
LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
for (Item item : mListItems){
LinearLayout llItem = (LinearLayout) inflater.inflate(R.layout.row, null);
TextView vin = (TextView) llItem.findViewById(R.id.vin);
vin.setText(item.getFirstText());
TextView desc = (TextView) llItem.findViewById(R.id.desc);
desc.setText(item.getSecondText());
// To know wich item has been clicked
llItem.setTag(item.getId());
// In the onClickListener just get the id using getTag() on the view
llItem.setOnClickListener(this);
llContainer.addView(llItem);
}
您的ScrollView将根据需要增加尺寸,您可以在整个屏幕上滚动。
答案 1 :(得分:3)
其他更好的答案(昨天晚了......)
您可以使用简单的ListView并添加标题TableLayout:
为TableView创建特定的布局。
在onCreate方法中:
LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
View headerView = inflater.(R.layout.header, mListView, false);
mListView.addHeaderView(headerView);
使用此方法,您将拥有包含由ListView自动管理的表视图的标题,并在用户滚动到ListView的开头时显示。
您可以从标准适配器中获得细胞重用的好处。
答案 2 :(得分:0)
您可以简单地将所有行放在线性布局中。我假设您已经定义了行布局。您需要做的就是遍历数据并为每个项目膨胀一行。列表视图可以滚动并使用大量技巧来消耗更少的资源,而不是一次显示所有项目。