2013-01-15 6 views
8

Nella mia area informazioni della mia app voglio mostrare una breve descrizione della mia app. Per questo ho bisogno di creare una vista con molto testo. Qual è la migliore pratica per questo? In realtà ho creato un layout lineare con una ScrollView, in questo aggiungerò il mio testo, che dovrebbe contenere anche alcuni valori variabili, ad es. la mia versione dell'app. Ma non so se ci sono modi migliori per farlo?Le migliori pratiche per mostrare grandi dati di testo in una vista Android?

Ecco il mio approccio attuale:

<LinearLayout 
    android:id="@+id/information_content" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_above="@id/bottom_footer" 
    android:layout_below="@id/top_header" 
    android:layout_marginLeft="@dimen/marginLeft" 
    android:layout_alignParentRight="true" 
    android:layout_weight="1" 
    android:orientation="vertical" > 

    <ScrollView 
     android:id="@+id/scrollView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      > 

      <EditText 
       android:id="@+id/info_text" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:ems="10" 
       android:inputType="textMultiLine" 
       android:text="Hallo das ist ein test!!! 
       dsf" /> 

     </LinearLayout> 
    </ScrollView> 

</LinearLayout> 

Tutti i consigli?

Grazie

risposta

20

Probabilmente stai cercando un tipico "Schermo su schermo" con un semplice testo scorrevole che può essere formattato usando HTML.

In primo luogo, ecco il layout /layout/about_layout.xml. Non è necessario avvolgere la vista in un LinearLayout extra.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="12dp" > 

    <TextView 
     android:id="@+id/about_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    </RelativeLayout> 

</ScrollView> 

In seguito, aggiungere il seguente al vostro /values/strings.xml:

<string name="about_text"> 
    <![CDATA[ 
    Author: Your name<br/><br/>Your description text, changelog, licences etc... ]]> 
</string> 

Infine, utilizzare il layout nel vostro AboutActivity.java, visualizzare la stringa HTML-formattato e arricchirlo con alcune informazioni di auto-aggiornamento, come ad esempio il tuo numero di versione.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.about_layout); 

    String versionName = ""; 
    try { 
     PackageInfo pinfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
     versionName = pinfo.versionName; 
    } catch (NameNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    TextView aboutTextView = (TextView) findViewById(R.id.about_text_view); 

    aboutText = Html.fromHtml("<h1>Your App Name, Version " + versionName + "</h1>" 
      + getString(R.string.about_text)); 
    aboutTextView.setText(aboutText); 
} 

Ecco come mi occupo dello schermo Informazioni nella mia app. Ci scusiamo per questa risposta potrebbe essere un po 'esagerato, ma penso che sia un modello comunemente richiesto.

+0

È possibile caricare il aboutText invece dal file strings.xml direttamente da un file, sarebbe più semplice da mantenere. –

+2

Per mantenere l'HTML separato, inserisci il file HTML nella cartella '/ assets' o'/raw' (descritto [qui] (http://stackoverflow.com/a/5771369/1140682), leggi 'InputStream' a una stringa (descritta [qui] (http: // StackOverflow.it/a/2549222/1140682)) e sostituire 'getString (R.string.about_text)' nella mia soluzione con quella stringa. – saschoar

+0

Ehi, ho fatto lo stesso per la mia app. Beh, la differenza è che la mia dimensione del file è di 1,5 mb e vedere che il mio telefono si blocca provano a caricare direttamente in una textview? Qual è un modo migliore per farlo? – Nobody

0

non c'è modo standardizzato per visualizzare un sacco di testo. Dipende da come vuoi che guardi. Tuttavia molti sviluppatori useranno la scrollview come hai fatto tu. Ad esempio, se stai visualizzando solo testo, dovresti usare uno textview piuttosto che l'edittext che hai.

ci sono altro modo per visualizzare un sacco di testo come un viewpager

+0

ViewPager non si adatta a questo caso d'uso. – Enigma

+0

"Gestione layout che consente all'utente di capovolgere a sinistra e destra tra le pagine di dati" - https://developer.android.com/reference/android/support/v4/view/ViewPager.html – jiduvah

0

LinearLayouts non servono scopo quando v'è un solo figlio View. Quando ho voluto mostrare un sacco di testo, ho usato questo XML:

<!-- Display the record details in a scrolling text view. --> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scrollview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/[my drawable]" 
    android:fillViewport="true" 
    android:scrollbars="vertical" > 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/defaultDetail" /> 

</ScrollView> 
0

Quello che stai facendo è perfetto. Non sono richieste modifiche. Ma il tuo LinearLayout più esterno non ha senso se questo ha solo un ScrollView come suo figlio. Tranne ciò, tutto è esattamente come dovrebbe essere fatto.

1
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"> 

    <ScrollView 
     android:id="@+id/ScrollView01" 
     android:layout_height="150px" 
     android:layout_width="fill_parent"> 

     <TextView 
     android:id="@+id/TEXT_VIEW" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" /> 
    </ScrollView> 
    <EditText 
     android:id="@+id/EDIT_TEXT" 
     android:layout_height="70px" 
     android:layout_width="fill_parent" 
     android:layout_alignParentBottom="true" 
     android:maxHeight="70px" 
    /> 

</RelativeLayout> 
0

uso questo

<TextView 
    android:id="@+id/text_view" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="false" 
    android:scrollbars="vertical" 
    android:textColor="#000" 
    > 
    </TextView> 


TextView textView = (TextView)findViewById(R.id.text_view); 
textView.setMovementMethod(ScrollingMovementMethod.getInstance()); 

questo è scorrimento automatico TextView.

Problemi correlati