动态更改Android首选项的widgetlayout资源

我在首选项屏幕中创建了一个首选项,如下所示:
<PreferenceScreen>
    <Preference
        android:title="title"
        android:key="key"
        android:widgetLayout="@layout/someview"/>
</PreferenceScreen>

在这里,我设置了一个widgetlayout资源,该资源应显示在首选项的右侧(如复选框首选项的复选框).我也可以在我的PreferenceActivity.onCreate()的代码中设置这个资源,如下所示:

Preference myPreference = findPreference("key");
myPreference.setWidgetLayoutResource(R.layout.someview);

这两种方法都可以正常工作,因此我可以在首选项右侧看到我的资源.
但是,我无法访问此资源(someview)以在运行时更改其属性.

无论是手动设置资源ID,从资源或findViewById充气它似乎都工作 – 我有无效的资源/资源ID未找到异常.似乎偏好活动稍后会使资源膨胀.

有没有人遇到同样的问题?有关如何在运行时更改widgetlayout资源属性的任何想法?

这是一个类似的问题,但没有得到回答

> [android-developers] problem accessing widget in Preference widgetLayout

解决方法

我似乎有同样的问题,我尝试这样:

1)创建自定义首选项并覆盖onBindView():

public class ProgressBarPreference extends Preference {

    private ProgressBar mProgressBar;

    // constructors

    @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        mProgressBar = (ProgressBar) view.findViewById(R.id.progressBar);
    }

    public ProgressBar getProgressBar() {
        return mProgressBar;
    }

}

2)将此首选项添加到屏幕xml:

<package.ProgressBarPreference
    android:key="key"
    android:summary="summary"
    android:title="title"
    android:widgetLayout="@layout/preference_widget_progressbar" />

preference_widget_progressbar.xml

<?xml version="1.0" encoding="utf-8"?>
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />

或者调用setWidgetLayoutResource().

3)onPreferenceTreeClick()时获取ProgressBar:

if (preference instanceof ProgressBarPreference) {
    ProgressBar progressBar = ((ProgressBarPreference) preference).getProgressBar();
    // TODO something
}

但是,一年多了!

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...