【问题标题】:SeekBar setMin require at least api 26 in Android?SeekBar setMin 在 Android 中至少需要 api 26?
【发布时间】:2018-01-27 19:43:13
【问题描述】:


我想在我的 android 应用程序中使用 SeekBar。我的 minsdk 版本必须是 23。 编译器说 SeekBar 的 setMin 至少需要 API 级别 26。 对于简单的 SeekBar setMin,我需要一些特殊的支持库吗?

我在 Linux 上使用 Android Studio 3.0.1。我的 build.gradle 是这样的:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.zamek.boyler"
        minSdkVersion 23
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    ...


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

我的布局 sn-p:

<SeekBar
        android:id="@+id/sb_hysteresis"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="15dp"/>

我的活动代码sn-ps:

import android.widget.SeekBar;
...
 private SeekBar hysteresis;
...
this.hysteresis = findViewById(R.id.sb_hysteresis);
this.hysteresis.setMin(10); <--Compiler said:Call requires API level 26 (current min is 23): android.widget.AbsSeekBar#setMin

谢谢,
扎梅克

【问题讨论】:

  • 是的,看来您需要 >= api 26 才能使用/设置该属性。更多内容请参见 link
  • 谢谢,我在这里找到了一个简单的 FLoatSeekBar:gist.github.com/niusounds/9505361 它运行良好。

标签: android android-seekbar


【解决方案1】:

在 API 级别 26 中添加了SeekBar setMin() 方法。

如果你想限制SeekBar 的最小值,那么你必须手动实现它。

 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                int min = 5;
                if(progress < min) {
                    seekBar.setProgress(min);
                }

            }

【讨论】:

  • 我建议在setProgress 之后调用return,这样它就不会执行下面的任何操作,并且在设置新进度后,这个onProgressChanged 将被调用一次,并具有预期值(即min
【解决方案2】:

我同意Zeeshan's response,但我的做法有点不同,也许它会帮助试图实现这一目标的人。

首先定义你的最小值和最大值。

private static int MAX_VALUE = 220;
private static int MIN_VALUE = 50;

然后像这样设置搜索栏最大值。通过这样做,您将使您的搜索栏只有您希望定义的间隔值的数量。

seekbar.setMax(MAX_VALUE - MIN_VALUE);

之后,每当您检查搜索栏的值时,您必须首先添加我们定义的最小值。

@Override
public void onProgressChanged(SeekBar seekBar, int value, boolean fromUser) {
    displayValue((value + MIN_VALUE) + "cm");
}

【讨论】:

  • 我推荐这种方法。这是为了真正设置最小值
【解决方案3】:

对于那些由于方法 setMin() 不存在而在 API 级别 android:min=... 会调用此方法。

可能会为您节省几个小时(实际上是几天)的复制/拔毛时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2013-05-15
    相关资源
    最近更新 更多