2010-10-06 19 views
6

Mam układ liniowy z pięcioma widokami tekstu. Załóżmy, że użytkownik kliknie trzeci obiekt TextView; Chcę rozszerzyć ten TextView na cały ekran. Innymi słowy, chcę pokazać trzeci tekst jako pełny ekran w tej samej aktywności nad innymi widokami tekstu. Jak mam to zrobic?Rozwiń Widok Androida jako pełny ekran

Odpowiedz

1

Tak, widzę problem, który masz na myśli. Zobacz przykład poniżej, przetestowałem go, aby upewnić się, że działa. To chyba nie jest najbardziej eleganckie rozwiązanie, ale tutaj jest.

Tym razem ustawiłem wysokość na 0, a wagę na 1 dla każdego widoku tekstu. To sprawia, że ​​każdy widok ma równy kawałek wysokości.

<TextView 
    android:id="@+id/textview1" 
    android:layout_width="fill_parent" 
    android:layout_height="0px" 
    android:layout_weight="1" 
    android:text="text1" 
/> 

W kodzie działalności, mam następujące deklaracje instancji:

private TextView tv1; 
private TextView tv2; 
private TextView tv3; 
private TextView tv4; 
private TextView tv5; 

private boolean singleViewExpanded = false; 

private OnClickListener myOnClickListener = new OnClickListener(){   
    public void onClick(View arg0) {   

     if(singleViewExpanded)     
     { 
      showAllViews();  
      singleViewExpanded = false; 
     } 
     else 
     { 
      // Hide all views apart from the clicked one 
      hideAllViews(); 
      arg0.setVisibility(View.VISIBLE); 
      singleViewExpanded = true; 
     } 
    }   
}; 

singleViewExpanded pozwala śledzić, czy są wyświetlane wszystkie opinie lub tylko jednego. OnClickListener jest tutaj zdefiniowany, abyśmy mogli ustawić go dla każdego z widoków TextView.

Są to pokazywać i ukrywać metody:

private void showAllViews() 
{ 
    tv1.setVisibility(View.VISIBLE); 
    tv2.setVisibility(View.VISIBLE); 
    tv3.setVisibility(View.VISIBLE); 
    tv4.setVisibility(View.VISIBLE); 
    tv5.setVisibility(View.VISIBLE); 

} 

private void hideAllViews() 
{ 
    tv1.setVisibility(View.GONE); 
    tv2.setVisibility(View.GONE); 
    tv3.setVisibility(View.GONE); 
    tv4.setVisibility(View.GONE); 
    tv5.setVisibility(View.GONE); 
} 

i wreszcie drut aż koparki onclick wewnątrz metody onCreate:

tv1 = (TextView)findViewById(R.id.textview1); 
    tv2 = (TextView)findViewById(R.id.textview2); 
    tv3 = (TextView)findViewById(R.id.textview3); 
    tv4 = (TextView)findViewById(R.id.textview4); 
    tv5 = (TextView)findViewById(R.id.textview5); 

    tv1.setOnClickListener(myOnClickListener); 
    tv2.setOnClickListener(myOnClickListener); 
    tv3.setOnClickListener(myOnClickListener); 
    tv4.setOnClickListener(myOnClickListener); 
    tv5.setOnClickListener(myOnClickListener); 
3

Jeśli początkowo ustawić wysokość każdego widoku tekstu do wrap_content jak poniżej:

<TextView 
    android:id="@+id/textview1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="text1" 
/> 

Następnie dołączyć obsługi kliknij że przełącza layout_height między wrap_content i fill_parent jak poniżej, należy osiągnąć to, co chcesz.

final TextView tv1 = (TextView)findViewById(R.id.textview1); 

    tv1.setOnClickListener(new OnClickListener(){   
     public void onClick(View arg0) {     
      if(tv1.getLayoutParams().height == LayoutParams.FILL_PARENT) 
       tv1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
      else 
       tv1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));     
     }   
    }); 

Można również odtwarzać z layout_weight, jeśli chcesz początkowo oddzielić swoje widoki tekstowe.

+0

Dzięki za odpowiedź, ale ten kod nie robi nic. W moim programie zaprojektowałem 5 widoków tekstowych, które są pod układem liniowym w orientacji pionowej. Ustawiłem wyżej wymieniony kod za pomocą onClickListner 3. widoku tekstowego. Ale po kliknięciu trzeciego tekstu pozostaje on taki sam, a nie rozrasta się i nie nakłada innych widoków tekstu. –

+0

Tak, działało, problem polegał na tym, że mój kontener z układem liniowym miał szerokość i wysokość układu jako Wrap_Content. Po zmianie na Fill_Parent zadziałało. Ale teraz problem polega na tym, że klikam na widok tekstowy, który jest rozwijany tylko w dół, tzn. Pokrywa obszar znajdujący się poniżej widoku tekstu. Ale są widoki, które są powyżej tego widoku tekstu. Chcę, aby ten widok był rozszerzany zarówno w kierunku w górę, jak iw dół, a więc obejmował cały ekran. –