2

我在我的应用程序中定义了一个 SeekBar,如下所示:

 <SeekBar
    android:id="@+id/seekbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

我想在它旁边放置一个与 SeekBar 高度相同的图像。我需要以编程方式设置图像的高度,以便它在所有设备上保持不变。但是我无法获得 SeekBar 的高度。

下面的代码返回视图的高度,而不是 SeekBar。

 mReadingSeekBar = (ReadingSeekBar) findViewById(R.id.seekbar);
 mBarHeight = mReadingSeekBar.getHeight();

而且这段代码也不起作用。它只返回 0:

mBarHeight = mReadingSeekBar.getProgressDrawable().getMinimumHeight();

有没有办法找到 SeekBar 的实际大小而不仅仅是视图大小?

4

3 回答 3

5

我想出了一个更好的方法来做到这一点。我在我的样式文件中设置了 ProgressDrawable 的高度,以便它在所有设备上保持相同的大小。以下是我在样式 xml 文件中声明它的方式:

<style name="tallerBarStyle" parent="@android:style/Widget.SeekBar">
        <item name="android:indeterminateOnly">false</item>
        <item name="android:progressDrawable">@drawable/styled_progress</item>
        <item name="android:indeterminateDrawable">@drawable/styled_progress</item>
        <item name="android:minHeight">8dp</item>
        <item name="android:maxHeight">21dp</item>
    </style>

然后我在我的 SeekBar 中使用它,如下所示:

<SeekBar
    android:id="@+id/seekbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/tallerBarStyle" />
于 2013-09-11T15:02:53.280 回答
0

我知道你用其他方式解决了这个问题。但这不是您问题的正确答案,我认为。

通过使用这种方法,

seekBar.getProgressDrawable().getBounds()

它返回进度drawable的矩形{left,top,right,bottom}。

(底部 - 顶部)给我一个进度可绘制高度,而不是 seekBar 高度。

于 2014-11-13T17:30:23.827 回答
0

通过深入研究源代码,我发现 indeterminateDrawable 具有(默认)进度可绘制的高度

mBarHeight = mReadingSeekBar.getIndeterminateDrawable().getIntrinsicHeight();
于 2019-02-15T23:02:29.943 回答