2012-09-26 6 views
5

私はアプリケーションを作成しています。それは古いアンドロイドOS上で実行する必要があります。 PreferenceScreenを含むoptions.xmlファイルを設定するPreferencesActivityを使用して環境設定画面を作成しました。プリファレンスのサブメニューはありません(PreferenceFragmentは実際のメリットはありません)。アンドロイド2.1でPreferenceActivityはAndroid 2.1では正常に動作しますが、4.1では埋められません

(2.2および2.3、まだICS上でテストしていない)風景の中に適切にそのような画面が表示されます。 Eclair

しかしJellybeanに、それは次のようになります。 Jellybean

それは恐ろしく見えます。レイアウトとして定義されたものはありません。標準的なaddPreferencesFromResource()です。誰かがこれの原因を知っていますか?それとも解決策ですか?

私のonCreateは、次のようになります。それ以外の

protected void onCreate(Bundle savedInstanceState) { // 
    super.onCreate(savedInstanceState); 
    Log.i(TAG, "Options Activity Loaded."); 
    setTitle(getString(R.string.optionsTitle)); 
    addPreferencesFromResource(R.xml.options); 
    setupListeners(); 
} 

すべてがちょうど好みのオブジェクトを作成し、それらがクリックされたときに取得ものを行うためのメソッドを割り当てます。私は、PreferenceFragmentとPreferenceActivityの両方のコードを作成したくありません。 Googleは、最大のバージョンのマーケットシェアにそのAPIがなく、互換性ライブラリに追加しない場合、どのようにFragment APIを使用するかを理解していません。

+0

私はICS/JBの設定画面にそのようなパディングがあるように感じます。私はそれを削除する方法が本当にあるかどうかは確かではありませんが、私は決定的な答えを出すわけではありません(それが私がコメントした理由です)。 – Jwc24678

+0

['addPreferencesFromResource()'](http: /developer.android.com/reference/android/preference/PreferenceActivity.html#addPreferencesFromResource(int))は推奨されていません。おそらく4.0+でまだサポートされているメソッド(そのドキュメントのページで詳しく説明しています)を使用すると、適切な結果が得られます。 – Eric

+0

それらを避けるために願っています...しかし、とにかくそれを降伏させてやる必要があるかもしれません。私は彼らが完全に互換性を持たない理由を理解していません。パディングの理由はありません。 – Mgamerz

答えて

1

アプリケーションは、SharedPreferencesの以前の機能と新しい機能の両方をサポートできます。古い設定のクラスと新しい設定のクラスを提供することができます。それほど多くのコードはありません。

Class spc = Build.VERSION_SDK_INT < Build.VERSION_CODES.HONEYCOMB ? 
    oldPreferenceActivity.class : newFragmentPreferenceActivity.class; 

Intent i = new Intent (this, spc); 
startActivityForResult (i, SHOW_PREFERENCES); 
関連する問題