2012-08-09 19 views
14

Ich versuche, einen Voreinstellungsbildschirm, der nur eine etwa, Kontakt und legale Option, die alle, wenn Sie nur Text anzeigen Klappentext und Symbol auf einer separaten Seite, keine shared preferences oder etwas.Preference Bildschirm Anzeige Text Block

Ich habe Probleme, die Hierarchie zu verstehen, um den Text anzuzeigen. Ich möchte den Fluss sein: settings -> about -> the about text

Momentan habe ich das, was mir die Kategorie und die Option gibt, aber ich weiß nicht, was ich machen soll, um neuen Text anzuzeigen.

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

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


    </PreferenceCategory> 
... 
</PreferenceScreen> 

Ich weiß nicht, welche Option zu verwenden, um das über klickbare in eine Textansicht zu machen.

Antwort

8

Sie können nicht einen formatierten Textblock in einem PreferenceScreen hinzufügen, das ist nicht, was es sein soll. Sie können jedoch Ihren Info-Text in eine andere Aktivität einfügen (ein LinearLayout mit einigen formatierten TextView s kann genug sein). Rufen Sie dieses an, indem Sie eine Absicht innerhalb der Präferenz übergeben:

<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

Können Sie auf diese mehr erweitern? Muss ich eine Absicht zur Aktivität aufrufen, um einen Textblock anzuzeigen? – Nick

+0

Nun, ein Textblock allein ist nicht in einer Präferenzseite enthalten. Wenn Sie dem nicht eine Zusammenfassung hinzufügen (die nur unformatierten Text anzeigt), ist Ihre einzige Option, eine neue Aktivität zu öffnen oder einfach nur die About-Seite als eine andere Sache zu definieren – Korcholis

+0

Okay, ich verstehe, was Sie meinen. Kann ich es so machen, dass meine Präferenz beim Klicken auf eine andere Präferenz übergeht, in der ich Titel und Zusammenfassung verwende, um den Text mit einer einzigen Absicht anzuzeigen? Grundsätzlich eine andere XML-Einstellungsdatei erstellen, die angezeigt wird, wenn auf "About" vom primären Einstellungsbildschirm geklickt wird? – Nick

22

Ich hatte das gleiche Problem und musste einen statischen Textblock zeigen. Obwohl in meinem Fall war es in der Präferenzseite ausgekleidet.

Das Tag ermöglicht zwar eine Verknüpfung, die statischen Text jedoch nicht löscht. Das Präferenz-Tag selbst tut dies jedoch. Sie können Text, die übliche Titelzeile sowie die Textzusammenfassung darunter anzeigen lassen. Beide Optionen sind optional und können nicht ausgewählt werden. Es wird die Illusion eines statischen Textes geben.

<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

Hinweis: Das Präferenz-Tag hat auch ein Attribut namens android: fragment, das mit einem Präferenzfragment zu verknüpfen scheint. Dies, kombiniert mit dem oben genannten scheint, was Sie für Ihre About-Box benötigen. –

25

A.Grandt Lösung gibt wirklich schöne Nachahmung von Textblock innerhalb Preference Aktivität, aber ich würde ein android:persistent="false" Attribut hinzufügen, die diese Präferenz pseudo "unnötig Speicherung vermeidet in SharedPreferences Datei für die Einstellungen der App.

Zusammenfassend. Imitation von Textview innerhalb Präferenzen Tätigkeit als A.Grandt vorgeschlagen wäre:

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

Obwohl Sie \n für Zeilenumbruch verwenden können, aber es wird das Voreinstellungselement selbst nicht die Größe, so gibt es eine Möglichkeit, dass diese Multilinien werden nicht vollständig in einem noch einzeiligen Preference Item sichtbar sein.

+0

Gibt es bei diesem Ansatz eine Möglichkeit, den Textblockwert (Zusammenfassung) * im Code * festzulegen? (Anwendungsfall: App-Versionsname oben auf dem Einstellungsbildschirm anzeigen.) – Jonik

+0

[Das ist ziemlich einfach geworden] (http://stackoverflow.com/a/43371960/56285); Suchen Sie im Code die Präferenz und legen Sie die Zusammenfassung dafür fest. – Jonik

3

Ich wollte einen Textblock hinzufügen, aber den tatsächlichen Text Inhalt programmgesteuert setzen. Mein spezifischer Bedarf: Zeigen Sie den Namen der App-Version oben auf dem Einstellungsbildschirm an.

Ich habe es nach dem Ansatz von A.Grandt und Krzysiek getan, und die Zusammenfassung in Code festlegen.

dev_preferences.xml:

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

Das Präferenz-Fragment (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); 
    } 

I beenden auch ein benutzerdefiniertes Layout unter Verwendung von bis (as in this answer) von android:layout="@layout/dev_preferences_header" im <Preference> Eintrag zu setzen.(Nicht notwendig, aber auf diese Weise können Sie ganz einfach das Aussehen der Präferenz „Header“ anpassen.)

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>