【问题标题】:How can I make a TextView appear disabled, but still respond to clicks?如何使 TextView 显示为已禁用,但仍响应点击?
【发布时间】:2014-03-27 11:14:43
【问题描述】:

我有以下代码:

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);

(这不起作用)

有没有办法做到这一点?

【问题讨论】:

    标签: android textview


    【解决方案1】:

    我认为你犯了一个小错误。 试试这个...

    TextView tv = (TextView) findViewById(R.id.example);
    
    if (condition) {
       tv.setEnabled(false);
       tv.setClickable(false);
    }
    
    tv.setOnClickListener(new View.OnClickListener() { ... });
    

    【讨论】:

    • 我希望它保持可点击状态!单独调用 setEnabled(false) 会使视图无法点击。
    • @Ellis 所以你想避免 setEnabled() 对吗?并且只是禁用文本视图但保持可点击。??
    • 基本上,是的 - 我想将其外观更改为使用 setEnabled(false) 但仍允许交互时的外观。
    【解决方案2】:

    据我所知,没有办法实现我想要的;必须手动更改文本的外观以匹配禁用的TextViews。

    使文本看起来被禁用:

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

    使文本看起来启用:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-06
        • 2011-08-14
        • 1970-01-01
        • 2019-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多