我有一个布局。此布局包含3个列表视图,Listview中的wrap_content数据的高度未修复。当Listview当时有一个巨大的数据时,数据会进入下面而数据无法看到,所以我想用三个Listview滚动视图,看看它是如何实现的。
有人对此有所了解吗?
这是我的视图,其中包含3个Listview,现在它的数据较少,但是当数据量很大时,最后一个Listview有问题需要查看。我想滚动灰色视图......
答案 0 :(得分:7)
在xml文件中使用线性布局而不是listview。 这是你的xml文件。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:id="@+id/scr" android:layout_height="fill_parent"
android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:layout_width="fill_parent"
android:id="@+id/r2" android:orientation="vertical"
android:layout_height="fill_parent" android:paddingTop="100dip"
android:paddingBottom="100dip">
<LinearLayout android:layout_width="fill_parent"
android:id="@+id/l1" android:orientation="vertical"
android:layout_height="wrap_content" android:layout_marginTop="10dip"
android:background="#00B2EE">
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:id="@+id/l2" android:orientation="vertical"
android:layout_height="wrap_content" android:layout_marginTop="10dip"
android:background="#00EE76">
</LinearLayout>
<LinearLayout android:layout_width="fill_parent"
android:id="@+id/l3" android:orientation="vertical"
android:layout_height="wrap_content" android:layout_marginTop="10dip"
android:background="#7171C6">
</LinearLayout>
</LinearLayout>
</ScrollView>
并放入另一个将按列表膨胀的xml。
这是您的主要活动课程。
package com.list.add;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
public class NewlistActivity extends Activity {
/** Called when the activity is first created. */
LinearLayout l1,l2,l3;
ScrollView scrollView;
ViewGroup contentView;
List<String> list = new ArrayList<String>();
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
l1 = (LinearLayout) findViewById(R.id.l1);
l2 = (LinearLayout) findViewById(R.id.l2);
l3 = (LinearLayout) findViewById(R.id.l3);
scrollView = (ScrollView) findViewById(R.id.scr);
contentView = (ViewGroup) findViewById(R.id.r2);
scrollView.setOnTouchListener(new ScrollPager(scrollView, contentView));
scrollView.post(new Runnable() {
public void run() {
scrollView.scrollTo(0, contentView.getPaddingTop());
}
});
list.add("Parth");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Parth");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Shah");
list.add("Parth");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Parth");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Chirag");
list.add("Shah");
list1.add("Parth");
list1.add("Parth");
list1.add("Parth");
list1.add("Parth");
list1.add("Parth");
list1.add("Parth");
list2.add("Kalpesh");
list2.add("Kalpesh");
list2.add("Kalpesh");
list2.add("Kalpesh");
list2.add("Kalpesh");
list2.add("Kalpesh");
list2.add("Kalpesh");
System.out.println(list);
System.out.println(list1);
System.out.println(list2);
for (int i=0; i<list.size(); i++)
{
LayoutInflater inflater = getLayoutInflater();
View vi = inflater.inflate(R.layout.raw, null);
TextView tv = (TextView) vi.findViewById(R.id.textView1);
tv.setText(list.get(i));
l1.addView(vi);
}
for (int i=0; i<list1.size(); i++)
{
LayoutInflater inflater = getLayoutInflater();
View vi = inflater.inflate(R.layout.raw, null);
TextView tv = (TextView) vi.findViewById(R.id.textView1);
tv.setText(list1.get(i));
l2.addView(vi);
}
for (int i=0; i<list2.size(); i++)
{
LayoutInflater inflater = getLayoutInflater();
View vi = inflater.inflate(R.layout.raw, null);
TextView tv = (TextView) vi.findViewById(R.id.textView1);
tv.setText(list2.get(i));
l3.addView(vi);
}
}
}
并制作一个这样的卷轴类:
public class ScrollPager implements OnTouchListener
public ScrollPager(ScrollView aScrollView, ViewGroup aContentView)
{
mScrollView = aScrollView;
mContentView = aContentView;
scroller = new Scroller(mScrollView.getContext(), new OvershootInterpolator());
task = new Runnable()
{
public void run()
{
scroller.computeScrollOffset();
mScrollView.scrollTo(0, scroller.getCurrY());
if (!scroller.isFinished())
{
mScrollView.post(this);
}
}
};
}
public boolean onTouch(View v, MotionEvent event)
{
// Stop scrolling calculation.
scroller.forceFinished(true);
// Stop scrolling animation.
mScrollView.removeCallbacks(task);
if (event.getAction() == MotionEvent.ACTION_UP)
{
答案 1 :(得分:1)
您应该在XML布局中的每个ListView中使用权重属性android:layout_weight="1"
。因此,它将为每个列表视图划分屏幕相等的空间,并且您的滚动将适用于每个ListView。
答案 2 :(得分:1)
如果要在垂直或水平堆栈中显示内容,则应使用LinearLayout
,然后使用layout_weight
属性来控制容器中各个行/列的比例。
如果您想要屏幕大小,请将layout_width
和layout_height
设置为fill_parent
,否则您将无法获得所有可用的屏幕尺寸。如果您尝试使用wrap_content
作为高度,则所有内容都会崩溃,除非您采用其他布局约束,例如: minHeight
。
我们在任何地方都使用它,它非常可靠。对于三个项目,您可以使用1/1/1
或3/3/3
。
重量也不一定相等!您可以按照自己的意愿分配比例;权重只是整个跨度(宽度/高度)的相对比率。例如。如果你想要中间元素的两倍大小,请使用1/2/1
;如果你想要40%使用30/40/30
或3/4/3
。
一个好的“技巧”是在一行/列上使用layout_weight
= 1(其他默认为零),它将“填充”任何剩余空间。这是一种常见的布局方案。
如果您需要可以滚动堆栈,可以将其放入ScrollView
。在这种情况下,您必须将layout_height
的{{1}}设置为LinearLayout
,然后根据布局系统的意外情况进行折叠(意味着您需要使用min /最大限制)。
答案 3 :(得分:1)
相反,让我对同样的实现给出最好的想法。
你有没有想过将ExpandableListView用于同一种实现?只需将第一组项目展开为展开,并将其他两个组展开为折叠,只需在用户点击特定组时展开它。
以下是一些相同的例子:
答案 4 :(得分:1)
使用此方法,您的列表视图可在scrollview中滚动: -
ListView lstNewsOffer.setAdapter(new ViewOfferAdapter(
ViewNewsDetail.this, viewOfferList));
getListViewSize(lstNewsOffer);
void getListViewSize(ListView myListView) {
ListAdapter myListAdapter = myListView.getAdapter();
if (myListAdapter == null) {
// do nothing return null
return;
}
// set listAdapter in loop for getting final size
int totalHeight = 0;
for (int size = 0; size < myListAdapter.getCount(); size++) {
View listItem = myListAdapter.getView(size, null, myListView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
// setting listview item in adapter
ViewGroup.LayoutParams params = myListView.getLayoutParams();
params.height = totalHeight
+ (myListView.getDividerHeight() * (myListAdapter.getCount() - 1));
myListView.setLayoutParams(params);
// print height of adapter on log
Log.i("height of listItem:", String.valueOf(totalHeight));
}