ScrollView(滚动条)

简介: 节带来的是Android基本UI控件中的第十个:ScrollView(滚动条),或者我们应该叫他 竖直滚动条,对应的另外一个水平方向上的滚动条:HorizontalScrollView,

本节带来的是Android基本UI控件中的第十个:ScrollView(滚动条),或者我们应该叫他 竖直滚动条,对应的另外一个水平方向上的滚动条:HorizontalScrollView,先来一发官方文档 的链接:ScrollView,我们可以看到类的结构如下:

网络异常,图片无法展示
|

原来是一个FrameLayout的容器,不过在他的基础上添加了滚动,允许显示的比实际多的内容!

另外,只能够往里面放置一个子元素,可以是单一的组件,又或者一个布局包裹着的复杂的层次结构!

一般对于可能显示不完的情况,我们可以直接在布局的外层套上一个: ScrollView或者HorizontalScrollView!就这么简单~!

1.滚动到底部:

我们可以直接利用ScrollView给我们提供的:fullScroll()方法

scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部

scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部

另外用这玩意的时候要小心异步的玩意,就是addView后,有可能还没有显示完, 如果这个时候直接调用该方法的话,可能会无效,这就需要自己写handler来更新了~

代码示例:

效果图:

网络异常,图片无法展示
|

实现代码:

布局比较简单,就不贴了,直接贴MainActivity MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_down;
    private Button btn_up;
    private ScrollView scrollView;
    private TextView txt_show;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bindViews();
    }
    private void bindViews() {
        btn_down = (Button) findViewById(R.id.btn_down);
        btn_up = (Button) findViewById(R.id.btn_up);
        scrollView = (ScrollView) findViewById(R.id.scrollView);
        txt_show = (TextView) findViewById(R.id.txt_show);
        btn_down.setOnClickListener(this);
        btn_up.setOnClickListener(this);
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= 100; i++) {
            sb.append("呵呵 * " + i + "\n");
        }
        txt_show.setText(sb.toString());
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_down:
                scrollView.fullScroll(ScrollView.FOCUS_DOWN);
                break;
            case R.id.btn_up:
                scrollView.fullScroll(ScrollView.FOCUS_UP);
                break;
        }
    }
}

你还可以使用另一种复杂一点的写法:

public static void scrollToBottom(final View scroll, final View inner) {
    Handler mHandler = new Handler();
    mHandler.post(new Runnable() {
        public void run() {
            if (scroll == null || inner == null) {
                return;
            }
            int offset = inner.getMeasuredHeight() - scroll.getHeight();
            if (offset < 0) {
                offset = 0;
            }
            scroll.scrollTo(0, offset);
        }
    });
}

scrollTo()参数依次为x,y滚到对应的x,y位置!

2.设置滚动的滑块图片

这个更加简单: 垂直方向滑块:android:scrollbarThumbVertical水平方向滑块:android:scrollbarThumbHorizontal

3.隐藏滑块

好吧,这个好像没什么卵用:

方法有两种: 1.android:scrollbars="none"2.Java代码设置:scrollview.setVerticalScrollBarEnabled(false);

4.设置滚动速度:

这个并没有给我们提供可以直接设置的方法,我们需要自己继承ScrollView,然后重写一个 public void fling (int velocityY)的方法:

@Override
public void fling(int velocityY) {
    super.fling(velocityY / 2);    //速度变为原来的一半
}
相关文章
|
前端开发 JavaScript UED
页面美化
页面美化
307 2
|
小程序 前端开发 JavaScript
微信小程序框架---视图层&逻辑层&API&事件
微信小程序框架---视图层&逻辑层&API&事件
381 0
|
弹性计算 安全 网络安全
搭建简易多人在线视频会议系统
本场景将介绍使用音视频服务单间一个简易的视频会议室。
|
9月前
|
人工智能 文字识别 自然语言处理
多模态数据信息提取解决方案测评报告
《多模态数据信息提取解决方案测评报告》概述了该方案在部署、操作界面、文档、函数模板及官方示例等方面的表现。其功能强大,涵盖OCR、NLP、物体检测等五大核心能力,适用于多种应用场景。系统运行稳定,尤其在图像识别方面表现出色,但在处理长篇文档和低质量音视频时有改进空间。尽管存在一些小问题,如配置复杂性和依赖库兼容性,整体用户体验良好,推荐给企业和开发者使用。
141 9
|
消息中间件 负载均衡 Java
常见的负载均衡策略有哪些?
常见的负载均衡策略有哪些?
1878 3
|
12月前
|
Unix Linux 开发工具
vim快捷键大全(表格形式)
vim快捷键大全(表格形式)
361 0
|
机器学习/深度学习 边缘计算 缓存
有哪些方法可以降低 LLM 的计算成本?
【8月更文挑战第13天】
314 5
|
消息中间件 数据采集 分布式计算
离线数仓(一)【数仓概念、需求架构】
离线数仓(一)【数仓概念、需求架构】
R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数
R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数
|
消息中间件 关系型数据库 MySQL
Flink CDC产品常见问题之用upsert的方式写入kafka失败如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。