Я продолжаю видеть руководство по добавлению собственных настроек панели поиска, но его нет в моем фактическом файле prefs.xml. Есть ли способ сделать его на моем главном экране настроек или мне придется его отделить.
Есть ли способ добавить панель поиска на мой фактический экран предпочтений?
comment
Кирк Бауком недавно опубликовал код, который делает именно это: Настройки Android SeekBar.
- person ehartwell   schedule 08.04.2012
Ответы (1)
Кажется, у Google есть 2 настройки ползунка -
- SeekBarPreference — встроенный
- SeekBarDialogPreference — на основе диалога
но я не уверен, когда они будут доступны.
Вы можете использовать собственный встроенный SeekBarPreference мной (см. 2 ползунка внизу):
Мой код довольно прост -
public class SeekBarPreference extends Preference implements OnSeekBarChangeListener {
private SeekBar mSeekBar;
private int mProgress;
public SeekBarPreference(Context context) {
this(context, null, 0);
}
public SeekBarPreference(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SeekBarPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setLayoutResource(R.layout.preference_seekbar);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
mSeekBar = (SeekBar) view.findViewById(R.id.seekbar);
mSeekBar.setProgress(mProgress);
mSeekBar.setOnSeekBarChangeListener(this);
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (!fromUser)
return;
setValue(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// not used
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// not used
}
@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
setValue(restoreValue ? getPersistedInt(mProgress) : (Integer) defaultValue);
}
public void setValue(int value) {
if (shouldPersist()) {
persistInt(value);
}
if (value != mProgress) {
mProgress = value;
notifyChanged();
}
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInt(index, 0);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical" >
<SeekBar
android:id="@+id/seekbar"
android:layout_width="0dp"
android:layout_weight="80"
android:layout_height="wrap_content" />
<TextView
android:id="@android:id/summary"
android:layout_width="0dp"
android:layout_weight="20"
android:layout_height="wrap_content" />
</LinearLayout>
person
Alexander Farber
schedule
14.05.2015
По какой-то причине
notifyChanged()
в функции setValue()
не вызывает мой Preference.OnPreferenceChangeListener.onPreferenceChange()
. Вместо этого мне пришлось заменить notifyChanged()
на callChangeListener(value)
, чтобы он вызывался. P.S. Я регистрирую обратный вызов с помощью preference.setOnPreferenceChangeListener()
.
- person reubenjohn; 24.12.2016