Android:使用Switch Preference预API级别14

预API级别14没有切换首选项。 如果我使用preferences.xml创build我的首选项屏幕有一些方法来区分API级别? 所以有一个旧版本的checkbox和API 14的开关?

什么是最好的方法?

Solutions Collecting From Web of "Android:使用Switch Preference预API级别14"

如果我使用preferences.xml创build我的首选项屏幕有一些方法来区分API级别? 所以有一个旧版本的checkbox和API 14的开关?

创build一个包含具有SwitchPreferencepreferences.xmlres/xml-v14/目录。 创build一个res/xml/目录,其中包含一个用CheckBoxPreferencereplaceSwitchPreferencepreferences.xml文件。 Android将根据应用程序运行的设备版本加载正确的preferences.xml文件版本。

你也可以使用android-switch-backport库,它有一个适用于Android 2.1+的SwitchPreference。

https://github.com/BoD/android-switch-backport

有一个解决方法,我不知道它是多么充分,通过包装在CheckBoxPreference中使用哪些视图(可能会错过一些function,但在一般情况下,它的工作原理)。

解决方法将使用CheckBoxPreference用于API-14之前的版本以及用于API 14及更高版本的SwitchPreference。

代码如下:

 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; } 

你可以使用SwitchCompat:

 <android.support.v7.widget.SwitchCompat android:id="@+id/switch_compat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:checked="true" android:textOff="OFF" android:textOn="ON" app:showText="false" android:focusable="false" android:focusableInTouchMode="false"/> 

在setOnCheckedChangeListener上:

 SwitchCompat switchCompat = (SwitchCompat)convertView.findViewById(R.id.switch_compat); switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { textView.setText("check"); } else { textView.setText("unCheck"); } } }); 

我希望能帮助你。

试试这个代码:

 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(); } }