Android:以编程方式为ProgressBar / SeekBar设置maxHeight参数

4

可以按照以下方式在XML中创建SeekBar...

<SeekBar xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/bpseekbar"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="3dp"
      android:max="100"
      android:maxHeight="8dp"
      ...

现在我想以编程的方式实现这个目标,因为我需要根据屏幕分辨率调整maxHeight(是的,我知道不应该这样做,但我有充分的理由)。我没有问题设置程序参数,除了我找不到如何设置最大高度。我觉得我需要使用属性,但我找不到确切的方法。有什么提示吗?

2个回答

5

直接实现是不可能的。SeekBar(实际上是ProgressBar的扩展)只能从XML布局属性获取maxHeight,没有相应的方法。

此外,调用setProgressDrawable时,ProgressBar会增加其maxHeight,以至少与可绘制对象的高度相同。您可以利用这一点。

另一种可能性是扩展SeekBar并提供自己的onMeasure方法。这实际上是maxHeight的使用位置。然后您可以在xml布局中使用扩展的SeekBar。


如果我子类化SeekBar,重写onMeasure方法,并将max(mymax, onmeasureheight)作为高度传递给super,那么它应该可以工作了吗? - Joris Weimar
覆盖最大高度??这取决于你的意思。 - Pointer Null
应该这样做。检查Android的ProgressBar.onMeasure源代码,看看如何使用mMaxHeight,然后类似地使用您的最大高度值。 - Pointer Null
创建一个自定义的SeekBar,然后使用它。 - Harsh Dev Chandel
1
我最终编写了自己的 SeekBar 类,该类继承自 View。 - Joris Weimar

1
使用第四个构造函数SeekBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)是以编程方式设置seekBar的maxHeight的最佳方法,按照以下步骤进行:
  1. 在values/style.xml中定义一个样式;
    <style name="SeekBarDefaultStyle">
        <item name="android:maxHeight">1dp</item>
        <item name="android:indeterminateOnly">false</item>
        <item name="android:focusable">true</item>
        <item name="android:mirrorForRtl">true</item>
    </style>
  1. 构建SeekBar的方法如下:mSeekBar = new SeekBar(context, null, 0, R.style.SeekBarDefaultStyle);

顺便提一下,Google决定在API 29中支持setMaxHeight方法:https://developer.android.com/reference/android/widget/ProgressBar.html#setMaxHeight(int)


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