【问题标题】:setEnabled doesnt work in androidsetEnabled 在 android 中不起作用
【发布时间】:2012-11-15 16:12:50
【问题描述】:

我有这个代码:

public TextView main_text;//begining of the class

main_text = (TextView) findViewById(R.id.TextMain); //inside OnCreate

main_text.setEnabled(false); //inside button handler

现在是 Xml 的部分

    <TextView
        android:id="@+id/TextMain"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="left"
        android:textColor="#FFFFFF"
        android:text="@string/home_load" >

    </TextView>

为什么 SetEnable 不起作用?看起来很明显,它应该这样做。

【问题讨论】:

  • 如果没有看到更多的活动代码,很难预测出什么问题。
  • 好吧,代码现在非常大。但基本上我呈现的作品是指我想隐藏的元素。我还应该展示哪些其他部分,在这个简单的功能中什么重要?嗯,用不同的话来说:我尝试这个代码没有任何东西(我只是试图隐藏 TextView)......并且没有任何反应(而 setVisibility(GONE) 在相同的配置中工作得很好)

标签: java android


【解决方案1】:

你希望setEnabled(false) 对 TextView 做什么?

如果你想隐藏TextView,你应该调用setVisibility(View.INVISIBLE)

如果你想禁用点击,你应该打电话给setOnClickListener(null)

如果您希望文本以禁用状态显示,则需要在单独的 XML 文件中定义视图的状态。

例如textView.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:color="@color/enabled" />
    <item android:state_enabled="false" android:color="@color/disabled" />
</selector>

然后在你的 TextView 定义中使用

android:textColor="@drawable/textView"

【讨论】:

  • 我想创建包含几个功能的活动,例如:显示描述、显示联系人、显示画廊。当我创建画廊时,我将一些图片添加到线性视图中,但是当我想(再次)进行描述时,我需要从画廊中隐藏图片。我知道这可能不是最好的解决方案。我尝试了 INVISIBLE/GONE,它可以工作,但我需要通用的东西,所以我现在尝试使用 setEnabled(并循环通过线性视图的 childrew),现在它不起作用
  • 您应该有 3 个线性布局 - (1) 用于描述,(2) 用于图库图像。将这两个 LinearLayout 包装在第三个 LinearLayout (3) 中(或 FrameLayout,具体取决于您希望它如何显示)。然后您可以使用 layout.setVisiblity(View.GONE) 隐藏整个内部 LinearLayout (1) 或 (2)。这样您就可以隐藏图库或描述的父级,并且布局中的所有子级也将隐藏
  • 谢谢,我会试一试,并发布一些代码。绝对 +1。
  • 杰夫,这不是真的,我发誓我最初的问题。但是你肯定解决了我的问题,我的应用程序现在可以正常工作了:D。我点击你同意接受。再次感谢。
  • 我发现state_enabled 的一些有趣行为在将它们用作选择器时也是如此。基本上确保您拥有state_pressedstate_enabled。两者都不允许启用状态甚至注册。还有人注意到这一点吗?
【解决方案2】:

视图可以由多个可触摸元素组成。您必须将它们全部禁用,如下所示:

for(View lol : text_view.getTouchables() ) {
    lol.setEnabled(false);
}

如果它是一个简单的,因为它也返回自己:

查找并返回作为该视图后代的所有可触摸视图,如果它本身是可触摸的,则可能包括该视图。

View#getTouchables()

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2021-08-31
    • 2016-02-20
    相关资源
    最近更新 更多