【问题标题】:Create own SwitchCompat Preference创建自己的 SwitchCompat 首选项
【发布时间】:2014-11-03 22:36:36
【问题描述】:

由于 appcompat v7 缺少 SwitchCompatPreference,看来有必要自己创建。

如何做到这一点?我用谷歌搜索了一下,找到了DialogPreference 的教程。我尝试将它用于SwitchCompatPreference,但在我的 xml 布局中,它总是说首选项 xml 中不允许此类。

我需要做什么?

【问题讨论】:

  • 我已经编辑了我的答案。请使用编辑后的答案。

标签: android android-appcompat preference switchcompat


【解决方案1】:

您不需要创建新组件。

首先,您应该使用CheckBoxPreference 而不是 SwitchPreference,以支持较低的 API。

使用现有的android.support.v7.widget.SwitchCompat 小部件,创建一个新的布局文件,例如l_switch.xml。使用以下代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/checkbox" <!-- IMPORTANT -->
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@null"
    android:clickable="false" <!-- IMPORTANT -->
    android:focusable="false" <!-- IMPORTANT -->
    android:gravity="center" />

然后,到你的 SwitchPreference CheckBoxPreferencePreferenceFragment

yourSwitch = findPreference("key_for_this_component");
yourSwitch.setWidgetLayoutResource(R.layout.l_switch);

或者,直接到您的 CheckBoxPreference,

android:widgetLayout="@layout/l_switch"

这将强制 CheckBoxPreference 使用 SwitchCompat 样式。

【讨论】:

  • 我正在使用此代码,虽然它确实显示了新的 SwitchCompat 小部件,但偏好从未真正持续存在。在您的项目中,您确定这实际上是在坚持偏好更改吗?
  • 我也有同样的问题。我会找到解决办法,并更新这篇文章。
  • 这可行,但您会丢失开关的切换动画。我真的希望他们在不久的将来创建一个 SwitchCompatPreference。
  • 您可以创建一个xml-v21 文件并在其中添加 SwitchPreference,而原始文件将具有 CheckBoxPreference。这样,您就不会在棒棒糖上丢失动画。
  • 这就是我目前正在做的事情。
猜你喜欢
  • 1970-01-01
  • 2013-04-13
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
相关资源
最近更新 更多