APIレベル14より前では、スイッチ設定はありません。設定画面を作成するためにpreferences.xmlを使用する場合、APIレベルを区別する方法はありますか?では、古いリリースのチェックボックスとAPI 14のスイッチがありますか?
最善の方法は何でしょうか?
設定画面を作成するためにpreferences.xmlを使用する場合、APIレベルを区別する方法はありますか?では、古いリリースのチェックボックスとAPI 14のスイッチがありますか?
SwitchPreference
を持つres/xml-v14/
を含むpreferences.xml
ディレクトリを作成します。 SwitchPreference
をCheckBoxPreference
に置き換えるres/xml/
ファイルを含むpreferences.xml
ディレクトリを作成します。 Androidは、アプリが実行されているデバイスのバージョンに基づいて、適切なpreferences.xml
ファイルエディションを読み込みます。
Android 2.1+で動作するSwitchPreferenceを持つAndroid-switch-backportライブラリを使用することもできます。
CheckBoxPreferenceで使用するビューをラップすることで、それがどれだけいっぱいかわからない回避策があります(一部の関数を見逃す可能性がありますが、一般的には機能します)。
回避策は、API-14より前の場合はCheckBoxPreferenceを使用し、API14以降の場合は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();
}
}