2012-08-09 14 views
14

Sto tentando di creare una schermata delle preferenze che ha solo un'opzione su, contatto e legale, tutte le quali quando si fa clic mostrano solo testo e icone in una pagina separata, non shared preferences o altro.Blocco di testo della schermata delle preferenze

Non riesco a capire la gerarchia per visualizzare il testo. Vorrei che il flusso fosse: settings -> about -> the about text

Attualmente ho questo, che mi dà la categoria e l'opzione, ma non so cosa renderlo per visualizzare il nuovo testo.

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

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


    </PreferenceCategory> 
... 
</PreferenceScreen> 

Non so quale opzione utilizzare per rendere cliccabile il clic in un testo.

risposta

8

Non è possibile aggiungere un blocco di testo formattato all'interno di uno PreferenceScreen, non è ciò che deve essere. Tuttavia, è possibile aggiungere il testo Informazioni su all'interno di un'altra attività (può essere sufficiente un LinearLayout con alcuni formati TextView s). Chiamare questo passando un intento all'interno della preferenza:

<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

Puoi espandere su questo di più? Devo chiamare un intento di attività per visualizzare un blocco di testo? – Nick

+0

beh, un blocco di testo da solo non è pensato per essere in una pagina di preferenze. A meno che non aggiungiate un riassunto a riguardo (che mostrerà solo testo non formattato), l'unica opzione è aprire una nuova attività o semplicemente definire la pagina about come un'altra cosa, piuttosto che una pagina di preferenza – Korcholis

+0

Ok, capisco cosa intendi. Posso fare in modo che la mia preferenza quando cliccato porti ad un'altra preferenza in cui io uso Titolo e riepilogo per visualizzare il testo con un solo intento? In pratica, crea un altro file delle preferenze XML che verrà visualizzato quando si fa clic su "Informazioni" dalla schermata delle preferenze principali? – Nick

22

Ho avuto lo stesso problema, e aveva bisogno di mostrare un blocco di testo statico. Anche se nel mio caso era allineato nella pagina delle preferenze.

Il tag consente il collegamento anche se questo non risolve la necessità di testo statico. Tuttavia, lo stesso tag di preferenza lo fa. Puoi farlo visualizzare il testo, la solita riga del titolo, così come il riepilogo del testo sottostante, entrambi sono opzionali e quindi renderlo non selezionabile. Darà l'illusione di un testo statico.

<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: il tag Preference ha anche un attributo chiamato android: fragment, che sembra essere collegato a un frammento di preferenza. Questo, combinato con quanto sopra, sembra essere quello che ti serve per la tua casella About. –

25

soluzione A.Grandt dà veramente bella imitazione di blocco di testo all'interno di Preferenze di attività, ma vorrei aggiungere un attributo android:persistent="false", che evita la memorizzazione inutilmente questo 'pseudo preferenza' in file di SharedPreferences per le impostazioni della tua app.

Per riassumere. Imitazione di TextView all'interno di Preferenze di attività come A.Grandt suggerito sarebbe:

<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."/> 

Sebbene sia possibile utilizzare \n per la linea di rottura, eppure non ridimensionare la preferenza elemento stesso, per cui v'è la possibilità che questi saranno multilinee non essere completamente visibile all'interno di un Elemento di preferenza ancora a linea singola.

+0

Utilizzando questo approccio, c'è un modo per impostare il valore del blocco di testo (riassunto) * nel codice *? (Caso di utilizzo: mostra il nome della versione dell'app nella parte superiore della schermata delle preferenze.) – Jonik

+0

[che si è rivelato piuttosto semplice] (http://stackoverflow.com/a/43371960/56285); nel codice, trova la preferenza e imposta il riepilogo per esso. – Jonik

3

Volevo aggiungere un blocco di testo, ma impostare il contenuto del testo effettivo a livello di programmazione. La mia specifica esigenza: mostrare il nome della versione dell'app nella parte superiore della schermata delle preferenze.

Ho eseguito l'operazione seguendo l'approccio A.Grandt e Krzysiek e impostando il riepilogo nel codice.

dev_preferences.xml:

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

La preferenza frammento (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); 
    } 

ho anche finito per usare un layout personalizzato (as in this answer) impostando android:layout="@layout/dev_preferences_header" nella voce <Preference>.(Non è obbligatorio, ma in questo modo si può facilmente personalizzare l'aspetto della preferenza "header").

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> 
Problemi correlati