Android自定义视图忽略XML中的“android:enabled”?

时间:2014-04-25 20:24:33

标签: android view

我在自定义视图上设置android:enabled="false",但它似乎对isEnabled()属性没有任何影响。

这是一个简单的测试用例:

public class TestView extends View {

    public TestView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint p = new Paint();
        p.setTextAlign(Align.CENTER);
        p.setTextSize(ViewUtils.dpToPx(this, 10));
        canvas.drawText("Enabled = " + (isEnabled() ? "true" : "false"),
                getWidth() / 2,
                getHeight() / 2,
                p);
    }
}

和相应的XML:

<com.example.TestView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@android:color/darker_gray"
    android:enabled="false"
    android:layout_width="100dp"
    android:layout_height="100dp"/>

输出视图如下所示:

output

有人可以解释一下原因吗?

3 个答案:

答案 0 :(得分:5)

据我所知,android:enabled不是View的属性,因为它不在文档中。

我认为没有办法通过XML布局文件修改isEnabled()的返回值。 (除非为自定义视图定义自定义属性)

答案 1 :(得分:0)

也许这个答案来晚了

  1. bills中声明
declare-styleable
  1. 获取表格 <attr name="android:enabled" format="boolean"/>
TypedArray
  1. 然后这样
isEnabled = typeArray.getBoolean(R.styleable.CunstomView_android_enabled, true)

答案 2 :(得分:0)

改用这个:

app:enabled="@{false}"