android 自定义listview不能滑动,android-禁用在listview中滚动

android-禁用在listview中滚动

我有一个列表视图,根据某些逻辑,我想暂时禁用滚动。view.setOnScrollListener(null); 我想我需要写一些代码对我没有帮助,有人可以给我一个历史记录或一些摘要吗?

谢谢

10个解决方案

44 votes

不创建新的自定义ListView的另一个选项是将onTouchListener附加到ListView上,如果运动事件动作为ACTION_MOVE,则在onTouch()回调中返回true。

listView.setOnTouchListener(new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

return (event.getAction() == MotionEvent.ACTION_MOVE);

}

});

Surya Wijaya Madjid answered 2020-08-02T20:02:30Z

42 votes

在您的自定义ListView中:

@Override

public boolean dispatchTouchEvent(MotionEvent ev){

if(ev.getAction()==MotionEvent.ACTION_MOVE)

return true;

return super.dispatchTouchEvent(ev);

}

然后,ListView将对单击做出反应,但不会更改滚动位置。

Pointer Null answered 2020-08-02T20:02:09Z

28 votes

使用listview.setEnabled(false)禁用列表视图滚动

注意:这也会禁用行选择

Nikita answered 2020-08-02T20:02:54Z

8 votes

使您的CustomListView

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

if(needToStop){

return false;}

return super.onInterceptTouchEvent(ev);

}

在false上,孩子们将处理触摸事件,请确保您将if condition放进去,以检查是否需要滚动。

Mohammad Ersan answered 2020-08-02T20:03:18Z

8 votes

如果您有一个事件绑定到列表项,则使用任何这些解决方案拖动列表仍将触发该事件。 您想要使用以下方法来解决用户期望通过从所选项目上拖动(根据Pointer Null的答案进行修改)来取消事件的情况:

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

final int actionMasked = ev.getActionMasked() & MotionEvent.ACTION_MASK;

if (actionMasked == MotionEvent.ACTION_DOWN) {

// Record the position the list the touch landed on

mPosition = pointToPosition((int) ev.getX(), (int) ev.getY());

return super.dispatchTouchEvent(ev);

}

if (actionMasked == MotionEven

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ListView控件的滚动条可以重画,但是需要通过自定义绘制的方式实现。你可以通过继承ListView类,重写其onDraw方法,然后在该方法绘制自定义滚动条。在绘制滚动条时,你可以使用Canvas类提供的绘制API,比如drawRect、drawCircle等方法,来绘制滚动条的外观。另外,你也可以通过定义属性,来控制滚动条的颜色、宽度、形状等属性。需要注意的是,自定义绘制滚动条可能会对ListView的性能造成影响,因此应该在需要的情况下使用。 ### 回答2: ListView控件的滚动条是由系统自动绘制的,并不能直接进行重画。滚动条的绘制是由Android系统的UI框架负责的,开发者无法直接控制滚动条的绘制过程。滚动条的外观和行为取决于系统样式和主题设置。 如果开发者想要自定义滚动条的外观,可以通过修改主题的方式来实现。可以创建一个自定义的主题,在主题指定滚动条的样式。然后在布局文件的根元素或ListView控件上应用此主题。这样ListView控件就会使用自定义滚动条样式了。 另外,也可以考虑使用第三方库或自定义控件来实现更灵活的滚动条效果。一些开源的库可以提供高度可自定义滚动条,开发者可以根据需要自行定制滚动条的样式和行为。 总结来说,ListView控件的滚动条本身不支持直接重画,但可以通过修改主题或使用第三方库实现滚动条的定制化。 ### 回答3: ListView控件的滚动条是由系统自动绘制的,我们无法直接重画滚动条。如果想要改变滚动条的样式或者行为,我们可以通过改变ListView的相关属性来间接实现。 首先,我们可以通过修改ListView的样式来改变滚动条的外观。可以使用自定义滚动条样式来替代系统默认的滚动条样式。这可以通过在XML布局文件设置ListViewandroid:scrollbarStyle属性来实现。 其次,我们可以通过设置ListView的相关属性来改变滚动条的行为。例如,我们可以通过设置android:scrollbars属性来指定滚动条何时显示。默认情况下,滚动条会在用户触摸ListView时显示,并在用户不再滚动ListView时自动消失。我们可以将android:scrollbars属性设置为"none"来禁用滚动条,或者设置为"vertical"或"horizontal"来永久显示相应方向的滚动条。 总而言之,虽然我们无法直接重画ListView控件的滚动条,但是我们可以通过修改ListView的样式和属性来间接实现改变滚动条的外观和行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值