web-dev-qa-db-ja.com

Android:APIレベル14より前のSwitchPreferenceの使用

APIレベル14より前では、スイッチ設定はありません。設定画面を作成するためにpreferences.xmlを使用する場合、APIレベルを区別する方法はありますか?では、古いリリースのチェックボックスとAPI 14のスイッチがありますか?

最善の方法は何でしょうか?

25
AndyAndroid

設定画面を作成するためにpreferences.xmlを使用する場合、APIレベルを区別する方法はありますか?では、古いリリースのチェックボックスとAPI 14のスイッチがありますか?

SwitchPreferenceを持つres/xml-v14/を含むpreferences.xmlディレクトリを作成します。 SwitchPreferenceCheckBoxPreferenceに置き換えるres/xml/ファイルを含むpreferences.xmlディレクトリを作成します。 Androidは、アプリが実行されているデバイスのバージョンに基づいて、適切なpreferences.xmlファイルエディションを読み込みます。

47
CommonsWare

Android 2.1+で動作するSwitchPreferenceを持つAndroid-switch-backportライブラリを使用することもできます。

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

17
Intrications

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

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

お役に立てば幸いです。

1
tvtruong

このコードを試してください:

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
Vladislav