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

时间:2012-03-11 18:26:30

标签: android view progress-bar seekbar

可以按如下方式在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(是的,我知道不应该这样做,但我有正当理由)。我没有以编程方式设置参数的问题,除了我无法找到如何设置maxHeight。我觉得我需要使用属性,但我找不到具体的方法。任何提示?

2 个答案:

答案 0 :(得分:5)

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

此外,ProgressBar在调用setProgressDrawable时将其maxHeight增加到至少为drawable的高度。你可以利用它。

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

答案 1 :(得分:0)

以编程方式设置seekBar的maxHeight的最佳方法是使用第四个构造函数SeekBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes),请按照以下步骤操作:

  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)