Применить специальную тему в PreferenceFragment

У меня многослойный вид с левым и правым фрагментом. На правом фрагменте запускаем PreferenceFragment. Проблема в том, что фрагмент выглядит полностью искаженным без какого-либо стиля. Есть ли способ применить тему только к PreferenceFragment?

Я пробовал это, но он не работал

Мой код

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // create ContextThemeWrapper from the original Activity Context with the custom theme final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.AppTheme_PreferenceTheme); // clone the inflater using the ContextThemeWrapper LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper); View view = super.onCreateView(localInflater, container, savedInstanceState); return view; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.app_settings_preference_layout); } 

Я думаю, что решение не сработало, потому что я уже раздул настройку предпочтений в onCreate. Есть ли способ раздуть макет предпочтений без использования метода addPreferencesFromResource и просто использовать службу LayoutInflater?

Solutions Collecting From Web of "Применить специальную тему в PreferenceFragment"

Вам не нужно использовать onCreateView ()

ты можешь:

1) определите макет приложения и фрагменты в вашей деятельности xml, например:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ..blabla <LinearLayout <fragment android:layout_width="match_parent" android:layout_height="wrap_content" android:name="com.xxx.MyPreferencesFragment1" //your own extended class android:id="@+id/preference_fragment1"/> <fragment android:name="com.xxx.MyPreferencesFragment2" //your own extended class android:id="@+id/preference_fragment2"/> </LinearLayout> </RelativeLayout> 

с

 public class MyPreferencesFragment1 extends PreferenceFragment { // Required empty public constructor @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences1); 

ИЛИ вы можете:

2) определите только компоновщик / контейнер («R.id.fragments_layout») в операции xml и сделайте остальную часть из java-кода

 <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/fragments_layout"> // only layout - dont define fragments this case 

И теперь вам также нужно раздуть XML-файл предпочтений внутри этого контейнера компоновки

 getFragmentManager().beginTransaction().replace/add(R.id.fragments_layout, new MyPreferencesFragment1()).commit(); getFragmentManager().beginTransaction().replace/add(R.id.fragments_layout, new MyPreferencesFragment2()).commit();