2012-08-09 7 views
14

Estoy tratando de hacer una pantalla de preferencia que solo tiene una opción about, contact y legal, que al hacer clic solo muestra texto e icono en una página separada, no shared preferences ni nada.Bloque de texto de visualización de pantalla de preferencia

Tengo problemas para entender la jerarquía con el fin de mostrar el texto. Me gustaría que el flujo sea: settings -> about -> the about text

Actualmente tengo esto, que me da la categoría y la opción, pero no sé qué hacer para mostrar el nuevo texto.

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    <PreferenceCategory 
      android:title="Info"> 
     <Preference android:title="About"/> 


    </PreferenceCategory> 
... 
</PreferenceScreen> 

No sé qué opción utilizar para hacer clic en una vista de texto.

Respuesta

8

No se puede agregar un bloque de texto formateado dentro de un PreferenceScreen, eso no es lo que debe ser. Sin embargo, puede agregar su texto Acerca de dentro de otra actividad (un LinearLayout con algunos formatos TextView s puede ser suficiente). Llámelo al pasar una intención dentro de la preferencia:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >  
    <Preference 
     android:key="about" 
     android:title="About">   
      <intent android:action="your.package.path.to.Activity"/>   
    </Preference> 
</PreferenceScreen> 
+0

¿Se puede ampliar esto más? ¿Debo llamar un intento de actividad para mostrar un bloque de texto? – Nick

+0

bueno, un bloque de texto en sí mismo no está destinado a estar en una página de preferencias. A menos que agregue un resumen a eso (que solo mostrará texto sin formato), su única opción es abrir una nueva actividad o simplemente definir la página Acerca de como otra cosa, en lugar de una página de preferencias – Korcholis

+0

Bien, veo lo que quiere decir. ¿Puedo hacer que mi preferencia al hacer clic lo lleve a otra preferencia en la que utilizo Título y resumen para mostrar el texto con un único intento? Básicamente, crea otro archivo de preferencias XML que se mostrará cuando se haga clic en "Acerca de" en la pantalla de preferencias principal. – Nick

22

Tuve el mismo problema y tuve que mostrar un bloque de texto estático. Aunque en mi caso estaba alineado en la página de preferencias.

La etiqueta no permite la vinculación, aunque eso no resuelve la necesidad de texto estático. Sin embargo, la etiqueta de preferencia sí lo hace. Puede hacer que muestre el texto, la línea de título habitual, así como el resumen de texto que se encuentra debajo, ambos son opcionales y luego lo hacen no seleccionable. Te dará la ilusión de un texto estático.

<Preference 
    android:key="pref_static_field_key" 
    android:selectable="false" 
    android:title="you can omit the title" 
    android:summary="Multi line description\ncan go here."/> 
+0

Nota: La etiqueta Preference también tiene un atributo llamado android: fragment, que parece estar vinculado a un fragmento de preferencia. Eso, combinado con lo anterior, parece ser lo que necesita para su cuadro Acerca de. –

25

solución de A.Grandt da muy buena imitación de bloque de texto dentro de preferencia de actividad, pero me gustaría añadir un atributo android:persistent="false", lo que evita el almacenamiento innecesariamente este 'seudo preferencia' en el archivo SharedPreferences para los ajustes de su aplicación.

En resumen. Imitación de Vista de Texto dentro de Preferencias La actividad como A.Grandt sugirió que sería:

<Preference 
    android:key="pref_static_field_key" 
    android:selectable="false" 
    android:persistent="false" 
    android:title="you can omit the title" 
    android:summary="Multi line description\ncan go here."/> 

Aunque puede utilizar \n para los saltos de línea, sin embargo, no va a cambiar el tamaño de la Preferencia propio artículo, por lo que existe la posibilidad de que estas líneas múltiples se no ser completamente visible dentro de un elemento de preferencia de línea única.

+0

Usando este enfoque, ¿hay alguna forma de establecer el valor del bloque de texto (resumen) * en el código *? (Caso de uso: mostrar el nombre de la versión de la aplicación en la parte superior de la pantalla de preferencias). – Jonik

+0

[Resultó bastante fácil] (http://stackoverflow.com/a/43371960/56285); en el código, encuentre la preferencia y establezca el resumen para ella. – Jonik

3

Quería agregar un bloque de texto, pero establece el contenido de texto real mediante programación. Mi necesidad específica: mostrar el nombre de la versión de la aplicación en la parte superior de la pantalla de preferencias.

Lo hice siguiendo el enfoque por A.Grandt y Krzysiek, y estableciendo el resumen en el código.

dev_preferences.xml:

<Preference 
    android:key="pref_app_version" 
    android:persistent="false" 
    android:selectable="false" 
    android:title="@string/app_name" /> 

El fragmento de preferencia (extends PreferenceFragment):

private static final String KEY_APP_VERSION = "pref_app_version"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     addPreferencesFromResource(R.xml.dev_preferences); 

     findPreference(KEY_APP_VERSION).setSummary(BuildConfig.VERSION_NAME); 
    } 

también Terminé usando un diseño personalizado (as in this answer) mediante el establecimiento de android:layout="@layout/dev_preferences_header" en la entrada <Preference>.(No es obligatorio, pero de esta manera se puede personalizar fácilmente el aspecto de la preferencia "cabecera".)

dev_preferences_header.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"  
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:padding="@dimen/spacing_small"> 

    <TextView 
     android:id="@android:id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@android:id/summary" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@android:id/title" /> 

</RelativeLayout> 
Cuestiones relacionadas