Android ListView滚动条内部显示无效
在Android ListView滚动条内部显示无效,android,android-listview,android-scrollbar,Android,Android Listview,Android Scrollbar,在水平滚动视图中有一个列表视图,滚动条占据了右侧的一个区域。当我切换到Scrollbarstyle:insideOverlay时,它仍然占用are。如果我改为滚动条:无,该区域将消失,因此我知道它与滚动条有关 我已经测试了滚动条上的所有样式,并使用了填充和边距,但没有找到任何方法使其真正覆盖。如果我删除滚动条是否正确覆盖,则似乎是HorizontalScrollView造成了问题 在这段代码中,我在xml和代码中都设置了覆盖,但它们似乎都不起作用 下面是一个基本的工作示例,其中显示了问题。在我的
水平滚动视图
中有一个列表视图
,滚动条占据了右侧的一个区域。当我切换到Scrollbarstyle:insideOverlay
时,它仍然占用are。如果我改为滚动条:无,该区域将消失,因此我知道它与滚动条有关
我已经测试了滚动条上的所有样式,并使用了填充和边距,但没有找到任何方法使其真正覆盖。如果我删除滚动条是否正确覆盖,则似乎是HorizontalScrollView
造成了问题
在这段代码中,我在xml和代码中都设置了覆盖,但它们似乎都不起作用
下面是一个基本的工作示例,其中显示了问题。在我的真实代码中,布局不仅仅是绿色的,所以将轨道涂成绿色的解决方案是行不通的
public class ScrollTest extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scroll_test);
ListView lv= getListView();
lv.setDivider(null);
//Just to make sure!
lv.setScrollBarStyle(ListView.SCROLLBARS_INSIDE_OVERLAY);
// create the grid item mapping
String[] from = new String[] {"rowid", "col_1", "col_2", "col_3", "col_4", "col_5"};
int[] to = new int[] { R.id.item1, R.id.item2, R.id.item3, R.id.item4, R.id.item5 , R.id.item6};
// prepare the list of all records
List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
for(int i = 0; i < 50; i++){
HashMap<String, String> map = new HashMap<String, String>();
map.put("rowid", "" + i);
map.put("col_1", "col_1_item_" + i);
map.put("col_2", "col_2_item_" + i);
map.put("col_3", "col_3_item_" + i);
map.put("col_4", "col_4_item_" + i);
map.put("col_5", "col_5_item_" + i);
fillMaps.add(map);
}
// fill in the grid_item layout
SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.row, from, to);
lv.setAdapter(adapter);
}
}
公共类ScrollTest扩展ListActivity{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u scroll\u test);
ListView lv=getListView();
lv.setDivider(空);
//只是为了确定一下!
lv.setScrollBarStyle(ListView.SCROLLBARS\u内部\u覆盖);
//创建网格项映射
字符串[]from=新字符串[]{“rowid”、“col_1”、“col_2”、“col_3”、“col_4”、“col_5”};
int[]to=newint[]{R.id.item1,R.id.item2,R.id.item3,R.id.item4,R.id.item5,R.id.item6};
//准备所有记录的清单
List fillMaps=new ArrayList();
对于(int i=0;i<50;i++){
HashMap=newHashMap();
map.put(“rowid”和“+i”);
地图放置(“第1栏”、“第1栏”项目+i);
地图放置(“col_2”、“col_2_项目”+i);
地图放置(“第三栏”、“第三栏”项目+i);
地图放置(“col_4”、“col_4_项目”+i);
地图放置(“第5列”、“第5列”项目+i);
fillMaps.add(map);
}
//填写网格项目布局
simpledapter adapter=新的simpledapter(this,fillMaps,R.layout.row,from,to);
低压设置适配器(适配器);
}
}
以及布局的相关xml。
activty_scroll_test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent">
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbarStyle="insideOverlay"/>
</HorizontalScrollView>
row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:background="@android:color/holo_green_dark"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/item1"
android:text="row_id"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:width="40dip"
android:padding="5dp"
/>
<TextView android:id="@+id/item2"
android:text="col_1"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:width="100dip"
android:padding="5dp"
/>
<TextView android:id="@+id/item3"
android:text="col_2"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:width="100dip"
android:padding="5dp"
/>
<TextView android:id="@+id/item4"
android:text="col_3"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:width="100dip"
android:padding="5dp"
/>
<TextView android:id="@+id/item5"
android:text="col_4"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:width="100dip"
android:padding="5dp"
/>
<TextView android:id="@+id/item6"
android:text="col_5"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:width="100dip"
android:padding="5dp"
/>
</LinearLayout>
来自(公认不是Android中最好的文档):
插入时,它们会添加到视图的填充中。[…]如果希望它们显示在视图边缘,忽略填充,则可以使用outsideOverlay或outsideInset
因此,将其设置为insideOverlay
,在ListView
上没有填充,列表项上没有边距,您将在列表项的顶部获得一个滚动条
您可以使用层次查看器确定间距的来源。很可能是列表项上的填充或边距,即
@+id/item6
上的5dp
,谢谢您的回复,遗憾的是,我没有这样的解决方案。我试图通过层次查看器和在布局的不同元素上设置背景色来查看它的位置。所有这些似乎都没有帮助,我唯一删除白色区域的就是完全删除滚动条。我刚刚意识到你的设置有点奇怪。HorizontalScrollView应该有一个子视图,这个子视图的大小是无限的。当ListView的子对象是父对象时,这可能会导致奇怪。尝试在ListView和HSV-a线性布局之间添加一个层可能就足够了。我已经测试过了,没有什么不同。