Android 6.0未选中从布局资源切换首选项。 Android 7.0工作正常

时间:2017-01-07 13:46:23

标签: android checked preference

爪哇

DeviceSwitch.setLayoutResource(R.layout.settings);
DeviceSwitch.setKey(CategoryKey);
DeviceSwitch.setDefaultValue(true);
DeviceSwitch.setEnabled(true);
DeviceSwitch.setSelectable(true);
DevicesShowScreen.addPreference(DeviceSwitch);

如果此代码运行 - > DeviceSwitch.setLayoutResource(R.layout.settings); 未在Android 6.0中检查开关

此字符串 - > DeviceSwitch.setCheked(真); 在Android 6.0中无法使用

在Android 7.0中切换首选项从布局检查正常

布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/listPreferredItemHeightSmall"
    android:gravity="center_vertical"
    android:clipToPadding="false">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        android:layout_marginStart="15dp">

        <TextView android:id="@android:id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:textAppearance="?attr/textAppearanceListItem"
            android:ellipsize="marquee" />

        <TextView android:id="@android:id/summary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@android:id/title"
            android:layout_alignStart="@android:id/title"
            android:maxLines="10"
            android:ellipsize="end" />

    </RelativeLayout>

    <Switch
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:focusable="false"
        android:clickable="false"
        android:gravity="center"
        android:layout_marginEnd="15dp"
        android:id="@android:id/switch_widget"
        android:checked="false" />

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

这是因为sdk 23使用com.android.internal.R.id.switchWidget标识符而不是com.android.internal.R.id.switch_widget

解决方法非常简单。只需继承SwitchPreference类并复制一些代码:

android:id="@+id/switch_widget"

当然不要忘记在小部件切换器布局中将{min,max}替换为{{1}}。