如何使TextView看起来被禁用,但仍然响应点击?

3

我有以下代码:

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个回答

1

我认为您犯了一些小错误。 尝试这样做...

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

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

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

我希望它仍然可以被点击!只调用 setEnabled(false) 会使视图无法被点击。 - Ellis
@Ellis,你想避免使用setEnabled()吗?只是禁用TextView但保持其可点击性? - Harshal Benake
基本上是的 - 我想改变它的外观,使其看起来像使用 setEnabled(false) 时的样子,但仍然允许交互。 - Ellis

1
据我所知,没有一种方法可以实现我想要的功能;文本外观必须手动更改以与禁用的TextView相匹配。
使文本看起来像是被禁用:
tv.setTextColor(Color.parseColor("#bbbbbb"));

使文本看起来已启用:
tv.setTextColor(context.getResources().getColor(android.R.color.primary_text_light));

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

0

虽然有点晚,但有更好的方法可以做到这一点,您可以使用TouchInterceptorLayout。

只需将其添加到您的项目中,将您的TextView放入TouchInterceptorLayout中,使TextViewsetEnabled()为true,并将点击监听器设置为interceptorLayout

您可以在此处找到Java-Kotlin类和XML代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接