有时候为了自定义布局的风格,需要自定义Preference,它的使用很简单,拿设置中的一个例子做为模板:
import com.android.settings.R;
import com.google.common.collect.Lists;
import android.content.Context;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* Creates a percentage bar chart inside a preference.
*/
public class UsageBarPreference extends Preference {
private PercentageBarChart mChart = null;
private final List<PercentageBarChart.Entry> mEntries = Lists.newArrayList();
public UsageBarPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setLayoutResource(R.layout.preference_memoryusage);
}
public UsageBarPreference(Context context) {
super(context);
setLayoutResource(R.layout.preference_memoryusage);
}
public UsageBarPreference(Context context, AttributeSet attrs) {
super(context, attrs);
setLayoutResource(R.layout.preference_memoryusage);
}
public void addEntry(int order, float percentage, int color) {
mEntries.add(PercentageBarChart.createEntry(order, percentage, color));
Collections.sort(mEntries);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
mChart = (PercentageBarChart) view.findViewById(R.id.percentage_bar_chart);
mChart.setEntries(mEntries);
}
public void commit() {
if (mChart != null) {
mChart.invalidate();
}
}
public void clear() {
mEntries.clear();
}
}
它的Layout文件如下:PercentageBarChart是自定义的View。
res/layout/preference_memoryusage.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:paddingEnd="?android:attr/scrollbarSize"
android:paddingStart="@*android:dimen/preference_widget_width">
<com.android.settings.deviceinfo.PercentageBarChart
android:id="@+id/percentage_bar_chart"
android:layout_width="match_parent"
android:layout_height="32dip"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
settings:minTickWidth="6dip"
settings:emptyColor="@color/memory_avail">
</com.android.settings.deviceinfo.PercentageBarChart>
</LinearLayout>