2012-07-03 5 views
17

Voglio implementare una vista pieghevole, esattamente come quella del mercato Google Play. Visualizza un numero di righe dal contenuto e una freccia, e toccando la freccia rivela l'intero contenuto. Questo è implementato con ExpandableListView o c'è qualche altra soluzione?Come posso implementare una vista comprimibile come quella di Google Play?

Le schermate allegate evidenziano ciò che sto cercando. Grazie. enter image description here

+1

Questo potrebbe aiutare: http://stackoverflow.com/questions/5165682/how-to-implement-expandable-panels-in-android – 0gravity

+0

Sì , questo aiuta un po ', poiché implementa ciò che sto cercando, ma speravo fosse una soluzione più semplice di un layout personalizzato ... –

risposta

29

C'è un modo più semplice:

 final TextView descriptionText = (TextView) view.findViewById(R.id.detail_description_content); 
     final TextView showAll = (TextView) view.findViewById(R.id.detail_read_all); 
     showAll.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       showAll.setVisibility(View.INVISIBLE); 

       descriptionText.setMaxLines(Integer.MAX_VALUE); 
      } 
     }); 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:id="@+id/detail_description_container" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     > 

     <TextView 
      android:id="@+id/detail_description_content" 
      android:maxLines="5" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 
     <TextView 
      android:id="@+id/detail_read_all" 
      android:clickable="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
    </LinearLayout> 
</ScrollView> 

La parte importante è maxLines e ScrollView. Questo non dà un'animazione lenta (sarebbe un'offerta più complessa) ma un effetto istantaneo aperto.

+0

È fantastico! –

+0

Uomo stupendo, funziona come un incantesimo. –

1

Scusa il mio orribile inglese.

Sulla base Warpzip risposta

res/values/strings.xml 
... 
... 
<string name="str_more"><![CDATA[<p><b>This is the header</b><u>(see more ..)</u>]]></string> 
<string name="str_less"><![CDATA[<p><b>This is the header</b><u>(less ..)</u>]]></string> 
<string name="str_details"><![CDATA[<p>A long string of text that do not want to show all the time.A long string of text that do not want to show all the time.A long string of text that do not want to show all the time.A long string of text that do not want to show all the time.A long string of text that do not want to show all the time.</p>]]></string> 
... 
... 

Nel nostro layoutIn nostro layout, possiamo includere uno ScrollView con un LinearLayout verticale (o con un po 'di lavoro di un RelativeLayout). In questi:

<TextView 
      android:id="@+id/txtvw_header" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:text="@string/str_more" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/txtvw_detail" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@+id/txtvw_tituloEntreTodos" 
      android:text="@string/str_details" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

Infine la nostra attività

view = inflater.inflate(R.layout.f_entretodos, container, false); 
     info = (TextView) view.findViewById(R.id.txtvw_header); 
     fullinfo = (TextView) view.findViewById(R.id.txtvw_detail); 
     info.setText(Html.fromHtml(getString(R.string.str_more))); 
     fullinfo.setText(Html.fromHtml(getString(R.string.str_detail))); 
     fullinfo.setVisibility(View.GONE); 
     info.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if (fullinfo.isShown()){ 
        fullinfo.setVisibility(View.GONE); 
        info.setText(Html.fromHtml(getString(R.string.str_more))); 
       }else{ 
        fullinfo.setVisibility(View.VISIBLE); 
        info.setText(Html.fromHtml(getString(R.string.str_less))); 
       } 
      } 

     }); 
Problemi correlati