Pre-API Level 14 не требует переключения. Если я использую файл preferences.xml для создания экрана предпочтений, есть ли способ различить уровни API? Итак, наличие флажка для старых выпусков и переключателя для API 14?
Что было бы лучше всего?
Если я использую Preferences.xml для создания своего экрана предпочтений, есть ли какой-нибудь способ отличить уровни API? Итак, имея флажок для старых выпусков и переключатель для API 14?
Создайте каталог res/xml-v14/
, который содержит preferences.xml
с вашим SwitchPreference
. Создайте каталог res/xml/
, который содержит файл preferences.xml
, который заменяет SwitchPreference
на CheckBoxPreference
. Android загрузит правильную версию файла preferences.xml
в зависимости от версии устройства, на котором работает приложение.
Существует обходной путь, который я не уверен, насколько он полон, оборачивая, какой вид использовать в 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;
}
Попробуйте этот код:
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();
}
}