android ListView 滚动条样式

Posted

技术标签:

【中文标题】android ListView 滚动条样式【英文标题】:android ListView scrollbarStyle 【发布时间】:2011-03-07 09:33:01 【问题描述】:

有人知道关于 android:scrollbarStyle 的任何文档吗?如果可能的话,我想看看 4 个值中的每一个的例子和屏幕截图。我看到了外部类型和内部类型之间的区别,但是插入和开始部分是关于什么的?例如,我似乎看不出 insideOutset 和 insideInset 之间的区别,同样,我看不出 outsideOutset 和 outsideOutset 之间的区别。

提前致谢! 本

【问题讨论】:

【参考方案1】:

这里有一个更详细的例子。我设置了背景颜色以使这里发生的事情更加明显。

首先,颜色:

黑色 - 边距 白色 - 填充 灰色 - 滚动视图的内容 绿色 - 滚动条 if 它占用了自己的空间(我将其明确添加为 scrollbarTrackVertical 用于两个“插入”示例)

让我们定义两个部分:

“内容区域” - 要在滚动视图中显示的内容 "padding" - 滚动视图内容周围的空间

让我们分别考虑scrollBarStyle的两个部分:

inside - 滚动条出现在内部内容区域(填充环绕内容和滚动条)

outside - 滚动条出现在内容区域之外

overlay - 滚动条覆盖它所在部分的右边缘

inset - 滚动条将其所在的部分推向左侧,占据自己的空间

布局xml出现在下方

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:layout_
    android:background="#000"
    >

    <ScrollView 
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:scrollbarStyle="insideOverlay"
        android:background="#fff"
        android:fadeScrollbars="false"
        android:layout_margin="8dp"
        android:padding="16dp" >
            <LinearLayout android:orientation="vertical" android:layout_ android:layout_ android:background="#aaa" >
                <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideOverlay"/>
                <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideOverlay"/>
                <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideOverlay"/>
                <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideOverlay"/>
                <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideOverlay"/>
                <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideOverlay"/>
                <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideOverlay"/>
            </LinearLayout>
    </ScrollView>

    <ScrollView 
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:scrollbarStyle="insideInset"
        android:background="#fff"
        android:scrollbarTrackVertical="@drawable/green_block"
        android:fadeScrollbars="false"
        android:layout_margin="8dp"
        android:padding="16dp" >
    
        <LinearLayout android:orientation="vertical" android:layout_ android:layout_ android:background="#aaa" >
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="insideInset" />
        </LinearLayout>
    
    </ScrollView>
    <ScrollView 
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:scrollbarStyle="outsideOverlay"
        android:background="#fff"
        android:fadeScrollbars="false"
        android:layout_margin="8dp"
        android:padding="16dp" >
    
        <LinearLayout android:orientation="vertical" android:layout_ android:layout_ android:background="#aaa" >
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideOverlay" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideOverlay" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideOverlay" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideOverlay" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideOverlay" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideOverlay" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideOverlay" />
        </LinearLayout>
    
    </ScrollView>
    <ScrollView 
        android:layout_
        android:layout_
        android:background="#fff"
        android:layout_weight="1"
        android:scrollbarStyle="outsideInset"
            android:scrollbarTrackVertical="@drawable/green_block"
        android:fadeScrollbars="false"
        android:layout_margin="8dp"
        android:padding="16dp" >
    
        <LinearLayout android:orientation="vertical" android:layout_ android:layout_ android:background="#aaa" >
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideInset" />
            <TextView android:textSize="32sp" android:layout_ android:layout_ android:text="outsideInset" />
        </LinearLayout>
    </ScrollView>
</LinearLayout>

以编程方式设置滚动条样式:

setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY)
setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET)
setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY)
setScrollBarStyle(View.SCROLLBARS_OUTSIDE_INSET)

【讨论】:

很高兴有一个解释清楚地解释了差异是什么!明确我们应该使用哪个版本【参考方案2】:

没有像 outsideOutset 和 insideOutset 这样的值。可能的四个值是 insideOverlay、insideInset、outsideOverlay、outsideInset 文档位于以下两个链接...

http://developer.android.com/reference/android/view/View.html#attr_android:scrollbarStyle

http://developer.android.com/reference/android/view/View.html#SCROLLBARS_INSIDE_INSET

我无法正确理解文档。 所以参考 ApiDemos Scrollbar demo,我尝试了这个。但是我发现 insideInset 和 outsideOverlay 没有区别。 这两个值是不同的,要么是 Inset 要么是 Overlay

更新后的scrollbar3.xml是

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical">

<ScrollView
    android:id="@+id/view1"
    android:layout_
    android:layout_
    android:padding="8dip"
    android:scrollbarStyle="insideOverlay"
    android:background="@android:color/white"
    android:overScrollMode="never">
    <TextView
        android:layout_
        android:layout_
        android:textColor="#ffffff"
        android:background="@android:color/darker_gray"
        android:text="@string/scroll_text" />
</ScrollView>

<ScrollView
    android:id="@+id/view2"
    android:layout_
    android:layout_
    android:padding="8dip"
    android:scrollbarStyle="insideInset"
    android:background="@android:color/white"
    android:overScrollMode="never">
    <TextView
        android:layout_
        android:layout_
        android:textColor="#ffffff"
        android:background="@android:color/darker_gray"
        android:text="@string/scroll_text" />
</ScrollView>

<ScrollView
    android:id="@+id/view3"
    android:layout_
    android:layout_
    android:padding="8dip"
    android:scrollbarStyle="outsideOverlay"
    android:background="@android:color/white"
    android:overScrollMode="never">
    <TextView
        android:layout_
        android:layout_
        android:textColor="#ffffff"
        android:background="@android:color/darker_gray"
        android:text="@string/scroll_text" />
</ScrollView>

<ScrollView
    android:id="@+id/view4"
    android:layout_
    android:layout_
    android:padding="8dip"
    android:scrollbarStyle="outsideInset"
    android:background="@android:color/white"
    android:overScrollMode="never">
    <TextView
        android:layout_
        android:layout_
        android:textColor="#ffffff"
        android:background="@android:color/darker_gray"
        android:text="@string/scroll_text" />
</ScrollView></LinearLayout>

我希望有人会看到并澄清......

【讨论】:

【参考方案3】:

上面的答案对我来说不太有效,所以我想出了以下答案:

如果这是您想要实现的目标,那就去吧:

列表视图:

<ListView
    android:layout_
    android:layout_
    android:scrollbarStyle="outsideOverlay"
    android:scrollbarThumbVertical="@drawable/scrollbar" />

可绘制滚动条:

<?xml version="1.0" encoding="utf-8"?>
<layer-list 
     xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@android:color/transparent"
        android:/>
    <item
        android:drawable="@android:color/holo_red_dark"
        android:right="18dp" />
</layer-list>

感谢this answer

【讨论】:

以上是关于android ListView 滚动条样式的主要内容,如果未能解决你的问题,请参考以下文章

listview在上gridview在下,如何能够一起滚动?

ListView 滚动条未调整大小

Android隐藏列表视图滚动条?

android中怎样隐藏滚动条

有没有办法一直显示 ListView 的滚动条?

android自定义滚动条(ScrollBar)样式