如何使TextView显示为禁用,但仍然响应点击?

时间:2014-03-27 11:14:44

标签: android textview

我有以下代码:

TextView tv = (TextView) findViewById(R.id.example);

if (condition) {
    tv.setEnabled(false);
}

tv.setOnClickListener(new View.OnClickListener() { ... });

如果condition为真,则会导致文字以浅灰色显示,但也会停止响应点击。

如何使TextView成为'禁用的'外观虽然仍然响应点击事件?我想在不手动调整颜色的情况下完成此操作,例如:

tv.setEnabled(false);
tv.setClickable(true);

(这不起作用)

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:1)

我认为你犯的是小错误。 试试这个......

TextView tv = (TextView) findViewById(R.id.example);

if (condition) {
   tv.setEnabled(false);
   tv.setClickable(false);
}

tv.setOnClickListener(new View.OnClickListener() { ... });

答案 1 :(得分:1)

据我所知,没有办法完成我想要的事情;必须手动更改文本的外观,以匹配已禁用的TextView

禁用文字:

tv.setTextColor(Color.parseColor("#bbbbbb"));

启用文字:

tv.setTextColor(context.getResources().getColor(android.R.color.primary_text_light));

这种方法的缺点是,我想,会有一些设备不使用#BBBBBB作为禁用TextView的颜色。这意味着使用上述方法调整的文本与使用setEnabled(false)调整的文字不匹配。

答案 2 :(得分:0)

这有点晚了,但是有一种更好的方法,可以使用TouchInterceptorLayout。

只需将其添加到项目中,将TextView放入TouchInterceptorLayout内,将TextView的{​​{1}}设为true,然后将点击监听器设置为setEnabled()

您可以找到Java-Kotlin类和XML代码here