我需要在特殊情况下防止用户输入搜索栏。如果我使用setEnabled(false)
,它会变成灰色而不是白色。
是否有任何方法可以在不调暗的情况下禁用搜索条或为禁用的搜索栏设置另一个drawable以进行进度?
答案 0 :(得分:5)
是。有可能的!但是你需要覆盖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));
}
答案 1 :(得分:3)
我不确定你为什么要改变它,我不认为为用户禁用某些内容的视觉队列是一种好习惯。如果它看起来很活跃,但没有互动,我会对你的应用程序感到生气。
无论如何,要回答你的问题,你应该看一下StateListDrawable这个question专门针对搜索栏进行概述。
答案 2 :(得分:2)
这里更好的解决方案......
seekBar.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
答案 3 :(得分:1)
Android在禁用状态下将颜色的alpha值从255更改为127。只需确保在禁用搜索栏后将其重新设置为255。
seekBar.post(new Runnable(){
@Override
public void run()
{
seekBar.getProgressDrawable().setAlpha(255);
}
});
只有在您不确定是否呈现了搜索栏时才需要view.post,否则只需
seekBar.getProgressDrawable().setAlpha(255);
就够了。
答案 4 :(得分:1)
您可以使用setEnabled(false)
并将Theme_disabledAlpha
属性设置为上面提到的@Ilya Pikin,如下所示:
<item name="android:disabledAlpha">1.0</item>