Android 某些视图可以启用/禁用,而其他视图不能启用/禁用

Android 某些视图可以启用/禁用,而其他视图不能启用/禁用,android,Android,我这里有一个布局,它有一些嵌套的布局,其中包含我想要启用/禁用的各种视图。我原以为这就像对它们调用setEnabled()一样简单,但我发现这只适用于textview和开关。Seekbars、Togglebuttons和Imagebuttons不会以编程方式对setEnabled()作出反应,并且它们在XML中没有可用的android:enabled=“。我错过了什么 <ScrollView xmlns:android="http://schemas.android.com/apk/res

我这里有一个布局,它有一些嵌套的布局,其中包含我想要启用/禁用的各种视图。我原以为这就像对它们调用
setEnabled()
一样简单,但我发现这只适用于
textview
开关。
Seekbars
Togglebuttons
Imagebuttons
不会以编程方式对
setEnabled()
作出反应,并且它们在XML中没有可用的
android:enabled=“
。我错过了什么

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!-- ***** Zoom ***** -->
    <RelativeLayout
        android:id="@+id/RL_zoom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="1dp"
        android:background="@drawable/layout_bg_transluscent"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textview_zoomLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_centerInParent="true"
            android:text="Zoom"
            android:textColor="#ff43b7ff"
            android:textSize="20sp" />

        <ImageButton
            android:id="@+id/imagebutton_zoomOut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginStart="15dp"
            android:layout_toEndOf="@+id/textview_zoomLabel"
            android:background="@null"
            android:src="@drawable/ic_zoom_out_white_24dp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_toEndOf="@+id/imagebutton_zoomOut"
            android:layout_toStartOf="@+id/imagebutton_zoomIn"
            android:orientation="horizontal">

            <SeekBar
                android:id="@+id/seekbar_zoom"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>

        <TextView
            android:id="@+id/textview_zoomValue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="5dp"
            android:layout_toStartOf="@+id/textview_zoomPercentageLabel"
            android:text="50" />

        <TextView
            android:id="@+id/textview_zoomPercentageLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerInParent="true"
            android:text="%" />

        <ImageButton
            android:id="@+id/imagebutton_zoomIn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_toStartOf="@id/textview_zoomValue"
            android:background="@null"
            android:src="@drawable/ic_zoom_in_white_24dp" />
    </RelativeLayout>

    <!--   *****  Focus ***** -->
    <RelativeLayout
        android:id="@+id/RL_focus"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/RL_zoom"
        android:layout_marginTop="2dp"
        android:background="@drawable/layout_bg_transluscent"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textview_focusLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/togglebutton_autofocus"
            android:layout_centerInParent="true"
            android:text="Focus"
            android:textColor="#ff43b7ff"
            android:textSize="20sp" />

        <ImageButton
            android:id="@+id/imagebutton_focusOut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginStart="14dp"
            android:layout_toEndOf="@+id/textview_focusLabel"
            android:background="@null"
            android:src="@drawable/ic_zoom_out_white_24dp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_toEndOf="@+id/imagebutton_focusOut"
            android:layout_toStartOf="@+id/imagebutton_focusIn"
            android:orientation="horizontal">

            <SeekBar
                android:id="@+id/seekbar_focus"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>

        <TextView
            android:id="@+id/textview_focusValue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="5dp"
            android:layout_toStartOf="@+id/textview_focusPercentageLabel"
            android:text="50" />

        <TextView
            android:id="@+id/textview_focusPercentageLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_toStartOf="@+id/togglebutton_autofocus"
            android:text="%" />

        <ImageButton
            android:id="@+id/imagebutton_focusIn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_toStartOf="@id/textview_focusValue"
            android:background="@null"
            android:src="@drawable/ic_zoom_in_white_24dp" />

        <ToggleButton
            android:id="@+id/togglebutton_autofocus"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerInParent="true"
            android:layout_marginLeft="3dp"
            android:minHeight="1dp"
            android:minWidth="1dp"
            android:textAllCaps="false"
            android:textColor="#ff43b7ff"
            android:textOff="AF&#10;Off"
            android:textOn="AF&#10;On" />
    </RelativeLayout>

    <!--   *****  Iris ***** -->
    <RelativeLayout
        android:id="@+id/RL_iris"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/RL_focus"
        android:layout_marginTop="2dp"
        android:background="@drawable/layout_bg_transluscent"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textview_irisLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/togglebutton_autoiris"
            android:layout_centerInParent="true"
            android:text="Iris"
            android:textColor="#ff43b7ff"
            android:textSize="20sp" />

        <ImageButton
            android:id="@+id/imagebutton_irisOut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginStart="41dp"
            android:layout_toEndOf="@+id/textview_irisLabel"
            android:background="@null"
            android:src="@drawable/ic_zoom_out_white_24dp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_toEndOf="@+id/imagebutton_irisOut"
            android:layout_toStartOf="@+id/imagebutton_irisIn"
            android:orientation="horizontal">

            <SeekBar
                android:id="@+id/seekbar_iris"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>

        <TextView
            android:id="@+id/textview_irisValue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="5dp"
            android:layout_toStartOf="@+id/textview_irisPercentageLabel"
            android:text="50" />

        <TextView
            android:id="@+id/textview_irisPercentageLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_toStartOf="@+id/togglebutton_autoiris"
            android:text="%" />

        <ImageButton
            android:id="@+id/imagebutton_irisIn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_toStartOf="@id/textview_irisValue"
            android:background="@null"
            android:src="@drawable/ic_zoom_in_white_24dp" />

        <ToggleButton
            android:id="@+id/togglebutton_autoiris"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerInParent="true"
            android:layout_marginLeft="3dp"
            android:minHeight="1dp"
            android:minWidth="1dp"
            android:textAllCaps="false"
            android:textColor="#ff43b7ff"
            android:textOff="AI&#10;Off"
            android:textOn="AI&#10;On" />
    </RelativeLayout>

    <!--   *****  On/Off ***** -->
    <RelativeLayout
        android:id="@+id/RL_device_tools_on_off"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/RL_iris"
        android:layout_marginTop="2dp"
        android:background="@drawable/layout_bg_transluscent"
        android:orientation="horizontal">

        <Switch
            android:id="@+id/switch_device_power_on_off"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:text="Device Power"
            android:textColor="#ff43b7ff" />

        <ImageButton
            android:id="@+id/imagebutton_device_refresh"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toEndOf="@+id/switch_device_power_on_off"
            android:src="@drawable/ic_refresh_white_24dp" />
    </RelativeLayout>

</RelativeLayout>


虽然每个视图都有一个
setEnabled
方法

在您的情况下,
TextView
Switch
ToggleButton
在设置该值时具有响应该值的逻辑。其他人没有。以类似的方式,您只能在这些服务器上设置
android:enabled
属性


如果您想让
Seekbar
ImageButton
响应
setEnabled
值,您可以创建自定义视图,扩展其中的每一个,覆盖
setEnabled
方法,然后实现您希望这些视图中的每一个做出反应的方式。

事实证明,我有一些bug已经修复。我之所以把我学到的东西贴出来,是因为我以前从未见过有人提到过,以防有人碰到这个问题。如果将自定义颜色设置为
TextView
调用
setEnabled()
不会影响颜色,使其看起来被禁用。类似地,对于
ImageView
我将background设置为
null
,这也使得按钮看起来好像对
setEnabled()
没有反应。我确信其他
视图
也有类似的细微差别,我只是还没有找到它们

有趣。那么,为什么网上有这么多人在这些
视图上使用
setEnabled
的例子呢?我已经更正了我以前的答案
ToggleButton
还应响应
setEnabled
调用:
ToggleButton
的alpha在禁用时是否不变?我不太确定您可能会提到哪些示例,但我猜测它们可能利用了
StateListDrawables
。这些选项允许您根据视图的状态(我们的案例处于启用/禁用状态)显示不同的可绘制图形。事实证明,
setEnabled()
实际上可以在这些
视图上工作。当我连续调用三个
seekbar
中的第一个
setOnTouchListener()
时,我发现,现在每隔一个
视图都会对
setEnabled()
作出反应。因此,有关
setOnTouchListener()
的某些内容正在阻止
setEnabled()
生效,但我找不到任何关于原因的信息。你知道吗?结果它毕竟不是
setOnTouchListener()
。我删除了它,
seekbar
仍在工作,但现在
textview
不工作。这就是我所改变的,所以我真的不明白这里发生了什么。