在特殊情况下,我需要防止用户输入搜索栏。如果我使用setEnabled(false)
它会变成灰色而不是白色。
是否有任何方法可以禁用 seekbar 而不会变暗或在禁用的 seekbar 中设置另一个可绘制的进度?
是的。有可能的!但是你需要重写 SeekBar 的 drawableStateChanged 函数,如下所示:
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
final Drawable progressDrawable = getProgressDrawable();
if(isEnabled() == false && progressDrawable != null) progressDrawable.setAlpha(255);
}
实际上,当我在 AbsSeekBar 中看到硬编码的 alpha 值时,我很生气:
mDisabledAlpha = a.getFloat(com.android.internal.R.styleable.Theme_disabledAlpha, 0.5f);
因为没有函数会关闭,甚至改变 SeekBar 的禁用 alpha 值。看看 drawableStateChanged 函数中的那些代码行:
if (progressDrawable != null) {
progressDrawable.setAlpha(isEnabled() ? NO_ALPHA : (int) (NO_ALPHA * mDisabledAlpha));
}
我不确定您为什么要更改此设置,而且我不认为为禁用某些功能的用户覆盖视觉队列是一种好习惯。如果它看起来很活跃,但没有交互,我会为你的应用生气。
无论如何,要回答您的问题,您应该查看StateListDrawable这个问题专门针对搜索栏概述了它。
更好的解决方案在这里......
seekBar.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
您可以使用setEnabled(false)
并将Theme_disabledAlpha
属性设置为上面提到的@Ilya Pikin,如下所示:
<item name="android:disabledAlpha">1.0</item>
Android 在禁用状态下将颜色的 alpha 值从 255 更改为 127。只要确保在禁用搜索栏后将其设置回 255。
seekBar.post(new Runnable(){
@Override
public void run()
{
seekBar.getProgressDrawable().setAlpha(255);
}
});
view.post 仅在您不确定是否已呈现 seekbar 时才需要,否则只需
seekBar.getProgressDrawable().setAlpha(255);
足够。