Показать дополнительную информацию для экранов предпочтений, когда поле сводки CheckboxPreference не достаточно длинное? - PullRequest
1 голос
/ 09 марта 2010

У меня есть экран, где вы можете включить / отключить модули для моего приложения Android.

Для этого я использую экран CheckboxPreference. Это все хорошо, но поле сводки обрезается при добавлении более длинных описаний, чем 2 строки.

Предположим, у меня есть 4-5 строк описания для каждого модуля, я хотел бы отобразить это в окне помощника.

Я пытался привязать событие щелчка к CheckboxPreference, но оно срабатывает для всей строки, поэтому не только при нажатии флажка, а также при любом переключении флажка.

Так что теперь мне интересно, можно ли это исправить. Поэтому, если пользователю нужна дополнительная информация, просто нажмите на текст, и откроется помощник, а если вы хотите переключить настройки, он коснется флажка.

Как бы вы это сделали? Я тоже открыт для других идей, если они работают.

Ответы [ 3 ]

13 голосов
/ 11 апреля 2010

У Хмна сегодня была такая же проблема. Мое альтернативное решение - просто разрешить отображать больше текста в сводке.

Просто создайте свой собственный подкласс CheckBoxPreference, который будет выглядеть примерно так:

public class CheckBoxPreferenceWithLongSummary extends CheckBoxPreference{

    public CheckBoxPreferenceWithLongSummary(Context context) {
        super(context);
    }

    public CheckBoxPreferenceWithLongSummary(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public CheckBoxPreferenceWithLongSummary(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
        summaryView.setMaxLines(10);
    }
}

Затем в вашем PreferenceScreen (я предполагаю, что вы используете xml для настройки макета предпочтений - не уверен, если это вообще возможно программно), просто замените старый <CheckBoxPreference.../> на новую реализацию, например <com.example.whatever.CheckBoxPreferenceWithLongSummary ... />

Кажется, для меня это нормально работает, хотя я не уверен насчет findViewById (android.R.id.summary), потому что в parentClass используется com.android.internal.R.id.summary, который не доступны напрямую из Java? Надеюсь, это не просто совпадение:)

0 голосов
/ 13 апреля 2012

Я нашел альтернативное решение, которое лучше подходит для моего случая, поскольку мне требовались более длинные сводки для разных типов предпочтений, а не только для CheckboxPreferences.

  • Я скопировал файл data/res/layout/preference.xml из SDK в res/layout/preference_long_summary.xml в моем приложении. (Я взял один из API уровня 7, так как он, кажется, работает и для более высоких уровней)
  • удалил атрибут android:maxLines из @+android:id/summary TextView
  • ссылался на этот макет из моих предпочтений для предпочтений, где мне нужно более подробное резюме с android:layout="@layout/preference_long_summary"
0 голосов
/ 09 марта 2010

Вы можете создать свой собственный подкласс CheckboxPreference, который даст вам больше места.

...