Android: при использовании Switch Preference до уровня API 14

Pre-API Level 14 не требует переключения. Если я использую файл preferences.xml для создания экрана предпочтений, есть ли способ различить уровни API? Итак, наличие флажка для старых выпусков и переключателя для API 14?

Что было бы лучше всего?

25
задан AndyAndroid 29 February 2012 в 20:13
поделиться

3 ответа

Если я использую Preferences.xml для создания своего экрана предпочтений, есть ли какой-нибудь способ отличить уровни API? Итак, имея флажок для старых выпусков и переключатель для API 14?

Создайте каталог res/xml-v14/, который содержит preferences.xml с вашим SwitchPreference. Создайте каталог res/xml/, который содержит файл preferences.xml, который заменяет SwitchPreference на CheckBoxPreference. Android загрузит правильную версию файла preferences.xml в зависимости от версии устройства, на котором работает приложение.

47
ответ дан 28 November 2019 в 18:13
поделиться

Существует обходной путь, который я не уверен, насколько он полон, оборачивая, какой вид использовать в CheckBoxPreference (может пропустить некоторые функции, но в общем случае это работает).

Обходной путь будет использовать CheckBoxPreference для pre-API-14 и SwitchPreference для API 14 и выше.

Вот код:

public class SwitchPreference extends CheckBoxPreference
  {
  android.preference.SwitchPreference _switchPreference =null;

  public SwitchPreference(final Context context)
    {
    super(context);
    if(VERSION.SDK_INT>=VERSION_CODES.ICE_CREAM_SANDWICH)
      _switchPreference=new android.preference.SwitchPreference(context);
    }

  public SwitchPreference(final Context context,final AttributeSet attrs)
    {
    super(context,attrs);
    if(VERSION.SDK_INT>=VERSION_CODES.ICE_CREAM_SANDWICH)
      _switchPreference=new android.preference.SwitchPreference(context,attrs);
    }

  public SwitchPreference(final Context context,final AttributeSet attrs,final int defStyle)
    {
    super(context,attrs,defStyle);
    if(VERSION.SDK_INT>=VERSION_CODES.ICE_CREAM_SANDWICH)
      _switchPreference=new android.preference.SwitchPreference(context,attrs,defStyle);
    }

  @Override
  protected View onCreateView(final ViewGroup parent)
    {
    final View view;
    if(VERSION.SDK_INT>=VERSION_CODES.ICE_CREAM_SANDWICH)
      {
      view=_switchPreference.getView(null,parent);
      // set as checked the view and the view's children, each in case it extend from Checkable
      ViewUtil.setChecked(view,isChecked());
      // set as non-clickable the view and the view's children
      ViewUtil.setClickable(view,false);
      }
    else view=super.onCreateView(parent);
    return view;
    }
2
ответ дан 28 November 2019 в 18:13
поделиться

Попробуйте этот код:

public class SettingsActivity extends PreferenceActivity {

    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.activity_settings);
        PreferenceScreen rootScreen = getPreferenceManager()
                .createPreferenceScreen(this);
        setPreferenceScreen(rootScreen);
        Preference NotifCheck=null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            NotifCheck = new SwitchPreference(this);

        } else {
            NotifCheck = new CheckBoxPreference(this);

        }
        NotifCheck.setKey("ShowNotification");
        NotifCheck.setTitle(R.string.ShowNotification);
        NotifCheck.setEnabled(true);
        rootScreen.addPreference(NotifCheck);
        // Show the Up button in the action bar.
        setupActionBar();
    }
}
0
ответ дан 28 November 2019 в 18:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: