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

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

提前致谢! 本

【问题讨论】:

    标签: android listview scrollbars


    【解决方案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_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000"
        >
    
        <ScrollView 
            android:layout_width="match_parent"
            android:layout_height="0dp"
            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_width="match_parent" android:layout_height="wrap_content" android:background="#aaa" >
                    <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideOverlay"/>
                    <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideOverlay"/>
                    <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideOverlay"/>
                    <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideOverlay"/>
                    <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideOverlay"/>
                    <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideOverlay"/>
                    <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideOverlay"/>
                </LinearLayout>
        </ScrollView>
    
        <ScrollView 
            android:layout_width="match_parent"
            android:layout_height="0dp"
            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_width="match_parent" android:layout_height="wrap_content" android:background="#aaa" >
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="insideInset" />
            </LinearLayout>
        
        </ScrollView>
        <ScrollView 
            android:layout_width="match_parent"
            android:layout_height="0dp"
            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_width="match_parent" android:layout_height="wrap_content" android:background="#aaa" >
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideOverlay" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideOverlay" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideOverlay" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideOverlay" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideOverlay" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideOverlay" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideOverlay" />
            </LinearLayout>
        
        </ScrollView>
        <ScrollView 
            android:layout_width="match_parent"
            android:layout_height="0dp"
            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_width="match_parent" android:layout_height="wrap_content" android:background="#aaa" >
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="outsideInset" />
                <TextView android:textSize="32sp" android:layout_width="wrap_content" android:layout_height="wrap_content" 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_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <ScrollView
        android:id="@+id/view1"
        android:layout_width="100dip"
        android:layout_height="120dip"
        android:padding="8dip"
        android:scrollbarStyle="insideOverlay"
        android:background="@android:color/white"
        android:overScrollMode="never">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="#ffffff"
            android:background="@android:color/darker_gray"
            android:text="@string/scroll_text" />
    </ScrollView>
    
    <ScrollView
        android:id="@+id/view2"
        android:layout_width="100dip"
        android:layout_height="120dip"
        android:padding="8dip"
        android:scrollbarStyle="insideInset"
        android:background="@android:color/white"
        android:overScrollMode="never">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="#ffffff"
            android:background="@android:color/darker_gray"
            android:text="@string/scroll_text" />
    </ScrollView>
    
    <ScrollView
        android:id="@+id/view3"
        android:layout_width="100dip"
        android:layout_height="120dip"
        android:padding="8dip"
        android:scrollbarStyle="outsideOverlay"
        android:background="@android:color/white"
        android:overScrollMode="never">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="#ffffff"
            android:background="@android:color/darker_gray"
            android:text="@string/scroll_text" />
    </ScrollView>
    
    <ScrollView
        android:id="@+id/view4"
        android:layout_width="100dip"
        android:layout_height="120dip"
        android:padding="8dip"
        android:scrollbarStyle="outsideInset"
        android:background="@android:color/white"
        android:overScrollMode="never">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="#ffffff"
            android:background="@android:color/darker_gray"
            android:text="@string/scroll_text" />
    </ScrollView></LinearLayout>
    

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

    【讨论】:

      【解决方案3】:

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

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

      列表视图:

      <ListView
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          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:width="20dp"/>
          <item
              android:drawable="@android:color/holo_red_dark"
              android:right="18dp" />
      </layer-list>
      

      感谢this answer

      【讨论】:

        猜你喜欢
        • 2011-02-13
        • 2011-05-17
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2012-03-01
        • 2015-08-23
        • 1970-01-01
        • 2015-11-05
        相关资源
        最近更新 更多