客户端禁用进度条更改

33

我有一个SeekBar,它会在我需要时改变进度,但我不希望用户能够手动更改它。

我尝试将SeekBar设置为:

<SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="65dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="78dp"
        android:progress="10"
        android:max="100"
        android:clickable="false"
        android:thumb="@drawable/transparent"
        android:progressDrawable="@drawable/customprogressbar" />

但它不起作用。

我该怎么办?


这更多或少是客户将要看到的示例。

我使用了自定义样式,因为将来我需要根据SeekBar所在的部分更改背景图像和进度。

谢谢!

未提供说明


重复:https://dev59.com/uW855IYBdhLWcg3wz3vo - greg7gkb
可能是如何将Android SeekBar设置为不可移动/冻结?的重复问题。 - user4734394
6个回答

72

您可以使用 android:enabled="false",但它会显示禁用效果 [变暗你的SeekBar]。

因此,如果您想显示启用的SeekBar,但不响应拇指活动,请按如下所示实现触摸事件处理程序并返回true。

seekBar.setOnTouchListener(new OnTouchListener(){
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    return true;
 }
});

1
我该如何返回默认的 onTouch 行为?假设我需要根据类型启用和禁用触摸。 - Alon
Kotlin答案:seekBar1.setOnTouchListener { _: View?, _: MotionEvent? -> true } - masoud jafari

44

你可以做的一件事是禁用 seekbar,类似于 seekbar.setEnabled(false)

这样一来,框架将不会接受用户的任何触摸事件,你只能通过代码更改进度级别。

希望这能帮到你......


尽管您可能希望包含自定义可绘制对象,因为将SeekBar设置为禁用会改变其外观。 - dberm22
1
@Arjun,我已经测试了你建议我的方法,它有效;) 谢谢! - Shudy
我希望只能通过拇指移动SeekBar并禁用点击。如何实现? - Srikanth Pai

2

只需从CustomSeekBar类的onTouch方法中返回false即可。

希望这个方法有效!


0
你可以使用 seekbar.isEnabled = false 来禁用 seekbar。这对我起作用了。

0

你可以做的一件事情是禁用进度条,就像 Kotlin 一样

val pro = popupContent.findViewById(R.id.penoptionsizeslider)

//在这里禁用它

pro.setEnabled(false)


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0

因此,如果您想显示启用了进度条但不响应拇指操作的情况,请实现如下所示的触摸事件处理程序并返回 true。

  seekBar.setOnTouchListener(new OnTouchListener()
  {
     @Override
     public boolean onTouch(View v, MotionEvent event) 
     {
        return true;
     }
  });


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接