2012-07-03 8 views
17

Chcę zaimplementować zwijany widok, dokładnie taki, jak ten z rynku Google Play. Wyświetla liczbę wierszy z treści i strzałkę, a stukanie w strzałkę pokazuje całą zawartość. Czy jest to realizowane za pomocą ExpandableListView lub czy istnieje jakieś inne rozwiązanie?Jak mogę zaimplementować zwijany widok, taki jak ten z Google Play?

Zrzuty ekranu połączone z zaznaczeniem tego, czego szukam. Dzięki. enter image description here

+1

To może pomóc: http://stackoverflow.com/questions/5165682/how-to-implement-expandable-panels-in-android – 0gravity

+0

Tak , to trochę pomaga, ponieważ implementuje to, czego szukam, ale miałem nadzieję, że jest to łatwiejsze rozwiązanie niż niestandardowy układ ... –

Odpowiedz

29

Jest prostszy sposób:

 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> 

Ważną częścią jest maxlines i Scrollview. Nie daje to powolnej animacji (która byłaby bardziej skomplikowana), ale efekt natychmiastowy.

+0

To jest niesamowite! –

+0

Awsome man, działa jak urok. –

1

Przepraszam za mój okropny angielski.

podstawie odpowiedzi Warpzip

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

W naszej layoutIn naszego układu, możemy zawierać Scrollview z pionowym LinearLayout (lub z niewielką ilością pracy RelativeLayout). W tych:

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

Wreszcie nasza aktywność

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))); 
       } 
      } 

     }); 
Powiązane problemy