首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过android定制CheckBoxPreference :widgetLayout

通过android定制CheckBoxPreference :widgetLayout
EN

Stack Overflow用户
提问于 2010-09-01 20:54:16
回答 2查看 5.1K关注 0票数 10

我有一个启用同步适配器的Preference,当被切换时,需要一段时间才能真正完成它的工作。因此,当用户单击Preference时,我停止使用AsyncTask来完成这项工作。同时,我禁用了Preference,并用不确定的ProgressBar替换了该复选框。我通过一个涉及覆盖在CheckBox之上的ProgressBarCheckBoxPreference子类的黑客攻击实现了这一切。糟透了。

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

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

代码语言:javascript
复制
View checkboxView = view.findViewById(com.android.internal.R.id.checkbox);

这实际上使得通过android:widgetLayout交换自定义Checkable并使其实际工作变得不可能。

这是CheckBoxPreference中的疏忽/错误,还是我误解了android:widgetLayout?有没有一种更干净的方式来做我想做的事情?

EN

回答 2

Stack Overflow用户

发布于 2012-03-04 23:43:21

首先,我同意您的观点,Android应该将代码块重构为可以被subclass.

  • Luckily,覆盖的“调用受保护的方法”。我们仍然可以覆盖如下工作:想法很简单:声明一个id为android默认id @android:id/checkbox

的复选框(

  1. view.findViewById(com.android.internal.R.id.checkbox); )。

<CheckBoxPreference

android:key="autostart"

android:widgetLayout="@layout/customlayout" />

在customlayout.xml中:

<SwitchView>

...

<CheckBox>

android:id="@android:id/checkbox

android:layout_width="wrap_content“

android:layout_height="wrap_content“

Android:text=“我的检查”

android:clickable="false“

android:focusable="false"

android:focusableInTouchMode="false"

</CheckBox>

值得注意的是,checkbox的可聚焦属性必须设置为false (我猜CheckBoxPreference的默认布局也做同样的事情),以便列表更新程序接收事件,而不是checkbox本身。我猜你的尝试没有成功,只是因为你没有设置可聚焦的状态。

greensuisse

(https://sites.google.com/site/greensuisse/)

票数 12
EN

Stack Overflow用户

发布于 2010-09-01 21:24:09

android:widgetLayout是首选项的正确部分。在CheckBoxPreference中,widgetLayout就是复选框。如果您采用基本首选项并在widgetLayout中放置一个ViewSwitcher,它应该可以工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3618172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档