1

横向きの 10 インチ デバイスで環境設定が正しく表示されません。カテゴリ ヘッダーとチェックボックスが非常に奇妙に表示されます。アイデアを得るために添付の画像を参照してください。 設定画面

Prefs-XML (カテゴリのみ、原因フィールドは後でコードに追加されます):

<?xml version="1.0" encoding="utf-8"?>

<PreferenceCategory
    android:key="settingsCategory"
    android:title="@string/mobile_global_settings" >
</PreferenceCategory>

SettingsActivity で、次のように PreferenceFragment を追加します。

protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_Tp_actionbar_style);
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}

私の PreferenceFragment は次のようになります (アプリにログインしているユーザーごとに異なる settings_keys を使用する必要があります):

public static class MyPreferenceFragment extends PreferenceFragment
{
    @Override
    public void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings);

        TPSettingsActivity act = (TPSettingsActivity)getActivity();
        String userName = "xxx";

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());

        PreferenceCategory targetCategory = (PreferenceCategory)findPreference("settingsCategory");

        CheckBoxPreference checkBoxPreference = new CheckBoxPreference(getActivity());
        checkBoxPreference.setKey(userName + "_autoclear");
        checkBoxPreference.setChecked(true);
        checkBoxPreference.setSummary(R.string.mobile_settings_onoff);
        checkBoxPreference.setTitle(R.string.mobile_settings_autoclean);
        checkBoxPreference.setChecked(prefs.getBoolean(userName + "_autoclear", false));
        targetCategory.addPreference(checkBoxPreference);

        TPListPreference listPref = new TPListPreference(getActivity());
        listPref.setKey(userName + "_autoclearperiod");
        listPref.setEntries(R.array.autoclearOptions);
        listPref.setEntryValues(R.array.autoclearValues);
        listPref.setSummary(R.string.mobile_settings_currentinterval);
        listPref.setTitle(R.string.mobile_settings_interval);
        listPref.setValue(prefs.getString(userName + "_autoclearperiod", "7"));
        targetCategory.addPreference(listPref);
    }
}

これは、アプリ固有のテーマではない場合にも発生します。私が使用しているテーマは、Android Asset Studio サイトにリストされている ThemeGenerator を使用したジェネレーターでした: Android Asset Studio

4

1 に答える 1

2

アプリの API が 11 以上の場合は、次のようにします。

public class FragmentPreferences extends Activity{
/*..*/
}

これの代わりに:

public class FragmentPreferences extends PreferenceActivity{
    /*..*/
}
于 2014-01-06T13:22:37.660 に答える