【问题标题】:Android custom view ignoring `android:enabled` in XML?Android自定义视图忽略XML中的`android:enabled`?
【发布时间】:2021-02-17 21:49:28
【问题描述】:

我在自定义视图上设置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"/>

输出视图如下所示:

谁能解释一下原因?

【问题讨论】:

  • android:enabled 在文档中未作为视图属性引用
  • 啊,你是对的。将其发布为答案,我会接受。

标签: android view


【解决方案1】:

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

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

【讨论】:

  • @user3452758:如果您的编辑建议是正确的,请将其作为答案发布
【解决方案2】:

改用这个:

app:enabled="@{false}"

【讨论】:

    【解决方案3】:

    也许这个答案来晚了

    1. declare-styleable中声明
      <attr name="android:enabled" format="boolean"/>
    
    1. 获取arr表单TypedArray
    isEnabled = typeArray.getBoolean(R.styleable.CunstomView_android_enabled, true)
    
    1. 那就这样
    <CustomView
      ...
      android:enabled="false"
    />
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 2012-07-16
      • 2010-10-14
      相关资源
      最近更新 更多