gpt4 book ai didi

android - 通过 android :widgetLayout 自定义 CheckBoxPreference

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:57 26 4
gpt4 key购买 nike

我有一个启用同步适配器的Preference,并且在切换时需要一段时间才能真正完成它的工作。因此,当用户单击 Preference 时,我会派生一个 AsyncTask 来完成这项工作。同时,我禁用了 Preference 并将复选框替换为不确定的 ProgressBar。我通过涉及 CheckBoxPreference 子类的 hack 来实现所有这些工作,该子类将 ProgressBar 覆盖在 CheckBox 之上。呸。

android:widgetLayout 属性似乎就是为此而设计的。我应该能够使用 android:widgetLayout 来指定默认 CheckBox 的替代品。所述替换将实现 Checkable 并使用 ViewSwitcherCheckBoxProgressBar 之间适当切换。

唯一的问题是 CheckBoxPreference 在其 onBindView() 方法中似乎忽略了可能使用 android:widgetLayout 的可能性.它明确地这样做:

View checkboxView = view.findViewById(com.android.internal.R.id.checkbox);

这实际上使得无法通过 android:widgetLayout 交换自定义 Checkable 并使其实际工作。

这是 CheckBoxPreference 中的疏忽/错误,还是我误解了 android:widgetLayout?是否有更简洁的方式来做我想做的事情?

最佳答案

  1. 首先,我同意你的观点,Android 应该重构这段代码 view.findViewById(com.android.internal.R.id.checkbox);到“调用 protected 方法”,它可以被子类覆盖。

  2. 幸运的是,我们仍然能够按如下方式覆盖解决方法:这个想法很简单:声明一个 id 为 android 默认 id @android:id/checkbox 的复选框。

<CheckBoxPreference<br/>
android:key="autostart"<br/>
android:widgetLayout="@layout/customlayout" />

在 customlayout.xml 中:

<SwitchView><br/>
...<br/>
<CheckBox>

android:id="@android:id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="mycheck"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
</CheckBox>

非常重要的是要注意复选框的可聚焦属性必须设置为false(我猜CheckBoxPreference 的默认布局做同样的事情)以便列表适配程序接收事件而不是复选框本身。我猜你没有成功只是因为你没有设置可聚焦状态。

瑞士绿
(https://sites.google.com/site/greensuisse/)

关于android - 通过 android :widgetLayout 自定义 CheckBoxPreference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3618172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com