ScrollView> LinearLayout> PreferenceFragment es altura cero

Tengo una actividad que tiene un ScrollView con un LinearLayout vertical que tiene dos fragmentos que son instancias de PreferenceFragment como se muestra en el siguiente archivo de diseño:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_height="wrap_content" android:layout_width="match_parent" > <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" tools:context="com.foo.app.SettingsActivity"> <fragment android:layout_width="wrap_content" android:layout_height="wrap_content" android:name="com.foo.app.SettingsFragment" android:id="@+id/fragment_settings"/> <fragment android:layout_width="wrap_content" android:layout_height="wrap_content" android:name="com.foo.app.NotificationSettingsFragment" android:id="@+id/fragment_notification_settings"/> </LinearLayout> 

El problema es que los dos fragmentos se muestran con sólo su título PreferenceCategory y el fragmento real UI es altura cero y no visible. Curiosamente, es posible desplazar cada fragmento individualmente y ver la interfaz de fragmento faltante. Es como si cada Fragmento estuviera dentro de un ScrollView.

Lo que esperaba era que los dos fragmentos fueran dimensionados para envolver su contenido y que hubiera un único deslizador vertical para desplazar el LinearLayout que contenía ambos fragmentos.

En caso de que sea relevante, los dos fragmentos extiende android.preference.PreferenceFragment y no definen su diseño en un archivo de diseño. En su lugar, cargan su interfaz de usuario de preferencia de la siguiente manera:

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.pref_notification); } 

TIA por su ayuda.

Quite el ScrollView externo. Tuve el mismo problema y eso lo solucionó para mí.

No lo he encontrado en la documentación todavía, pero aparentemente el PreferenceFragment suministra su propio ScrollView alrededor de la PreferenceScreen. De alguna manera eso conduce a una altura wrap_content lo suficientemente grande para mostrar el primer elemento (por ejemplo, un encabezado de categoría).

La pregunta es bastante antigua, pero en caso de que alguien tropiece con esto, he logrado encontrar una solución. Al igual que @Ewoks mencionado, tuve que conformarme con una altura fija también (que no siempre jugaba bien con varios dpi de los dispositivos).

Pero con la ayuda de este código me las arreglé para hacer la dinámica altura, que envuelve el contenido bien.

En su clase PreferenceFragment , haga lo siguiente:

 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (getView() != null) { ListView listView = (ListView) getView().findViewById(android.R.id.list); Adapter adapter = listView.getAdapter(); if (adapter != null) { int height = 0; //int height = listView.getPaddingTop() + listView.getPaddingBottom(); for (int i = 0; i < adapter.getCount(); i++) { View item = adapter.getView(i, null, listView); item.measure(0, 0); height += item.getMeasuredHeight(); } FrameLayout frame = (FrameLayout) getActivity().findViewById(R.id.content_frame); //Modify this for your fragment ViewGroup.LayoutParams param = frame.getLayoutParams(); param.height = height + (listView.getDividerHeight() * adapter.getCount()); frame.setLayoutParams(param); } } } 

Espero que esto ayude a alguien!

Prueba a configurar el android: layout_weight en cada fragmento para que tenga aproximadamente el tamaño de cada lista de configuraciones. P.ej

 <fragment android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.3" android:name="com.foo.app.SettingsFragment" android:id="@+id/fragment_settings"/> <fragment android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.7" android:name="com.foo.app.NotificationSettingsFragment" android:id="@+id/fragment_notification_settings"/> 
  • Cómo cambiar el color de la actual desplazamiento en ScrollView Android?
  • Android: ¿Cómo puedo hacer elementos desplazables horizontalmente en una lista vertical?
  • ¿Cómo puedo ajustar las interacciones con ScrollView, de modo que los usuarios no se muevan accidentalmente en la dirección equivocada?
  • Barra de desplazamiento a ViewGroup personalizado
  • Android ScrollView problema de diseño
  • Android RelativeLayout alinear preocupación
  • Android - EditText multilínea forzada a llenar la altura
  • Artículo Sticky ScrollView en la parte inferior - Android
  • Desplácese hasta la última línea de TableLayout dentro de ScrollView
  • Escaneando con múltiples RecyclerViews en Layout
  • ¿El oyente Scrollview no está trabajando en Xamarin para Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.