【问题标题】:ListView Scrollbars insideOverlay no effectListView Scrollbars insideOverlay 没有效果
【发布时间】:2013-08-14 17:54:30
【问题描述】:

我在HorizontalScrollView 中有一个ListView,滚动条轨道占据了右侧的一个区域。当我更改为Scrollbarstyle:insideOverlay 时,它仍然不会占用空间。如果我更改为滚动条:无该区域消失,所以我知道它与滚动条有关。

我已经测试了滚动条上的所有样式,并玩弄了填充和边距,但没有找到任何方法让它真正覆盖。如果我删除滚动条被正确覆盖,这似乎是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);
    }
}

以及布局的相关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>

行.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 android-listview android-scrollbar


    【解决方案1】:

    来自android:scrollbarStyle(诚然不是 Android 中最好的文档):

    插入时,它们会添加到视图的填充。 [..] 如果您希望它们出现在视图的边缘,忽略填充,那么您可以使用 outsideOverlay 或 outsideInset。

    因此,将其设置为insideOverlay,在ListView 上没有填充并且在列表项上没有边距,您会在列表项的顶部看到一个滚动条。

    您可以使用 Hierarchy Viewer 找出间距的来源。它可能是列表项上的填充或边距,即5dp 上的@+id/item6

    【讨论】:

    • 感谢您的回复,遗憾的是我对此类解决方案没有任何运气。我试图通过 Hierarchy Viewer 和在布局的不同元素上设置背景颜色来查看它的位置。这些似乎都没有帮助,我唯一删除白色区域的就是完全删除 ScrollBars。
    • 我刚刚意识到你的设置有点奇怪。 Horizo​​ntalScrollView 应该有 1 个孩子,它被赋予无限可能的大小。当 ListView 的孩子是 fill_parent 时,这可能会导致奇怪。尝试在 ListView 和 HSV 之间添加一个层 - 一个 LinearLayout 可能就足够了。
    • 我测试过没有区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2018-05-21
    • 2018-07-28
    • 2018-05-15
    • 1970-01-01
    相关资源
    最近更新 更多