2010-10-07 14 views
19

Domanda Se ho il seguente:altezza minima fill_parent e altezza wrap_content in ScrollView? (O semplicemente il codice del layout di composizione e-mail app)

<ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <LinearLayout android:layout_width="fill_parent" android:layout_height="?" android:orientation="vertical"> 
     <EditText android:layout_width="fill_parent" android:layout_height="?" android:hint="Subject" android:id="@+id/subject" /> 
     <EditText android:layout_width="fill_parent" android:layout_height="?" android:id="@+id/body" /> 
    </LinearLayout> 
</ScrollView> 

Come posso ottenere il corpo (secondo EditText) per riempire il resto dello schermo, ma hanno ancora la scrollview entra quando il contenuto del corpo è troppo lungo? Come un height="wrap_content" e minHeight="fill_parent"

layout_height="fill_parent" sembra non fare nulla se li metti in uno ScrollView

un esempio funzionante di quello che voglio è l'applicazione di posta elettronica comporre finestra

Ho provato questo e gli elementi EditText agiscono come se fossero wrap_content e non avviene alcun riempimento. Basta scorrere se si digita abbastanza

<ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> 
     <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" layout_weight="1" android:hint="Subject" android:id="@+id/subject" /> 
     <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" layout_weight="1" android:id="@+id/body" /> 
    </LinearLayout> 
</ScrollView> 

risposta

53

Ho trovato un collegamento allo mail app source code in my accepted answer on another question. La risposta è semplice! Aggiungiallo <ScrollView...> e aggiungi android:layout_weight="1.0" alla vista in cui desideri occupare tutto lo spazio disponibile. spiegato in questo blogspot

+5

Solo per coloro che si imbattono in questo, non dimenticare che è necessario specificare il peso come ho fatto sopra. –

+0

Romain Guy spiega questa tecnica in un post sul blog: http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/ – caw

+1

@MarcoW. come faresti la scrollview a lasciare al suo bambino tutto lo spazio di cui ha bisogno, ma lasciare che la scrollview abbia un'altezza massima? per esempio: l'altezza massima è 100dp. se il bambino ha bisogno di meno, bambino e scrollView hanno la loro altezza su questo valore (che è inferiore a 100dp).se il bambino ha bisogno di 100dp o più, entrambi otterranno l'altezza di 100dp. –

0

Perché non fanno l'essere fill_parent ScrollView e A e B per wrap_content? L'unica cosa che vuoi è che la tua ScrollView si adatti allo schermo.

+0

Voglio anche textarea B per riempire lo schermo. Come un'altezza minima: fill_parent. –

+0

Provare con LinearLayout e layout_weight = "1" su ogni A e B con layout_height = "fill_parent" su A e B anche – fedj

+0

Vedere il mio esempio di codice sopra –

0

dopo aver chiamato
AlertDialog dialog = builder.show();

quindi chiamare
fixScrollViewHeight (scrollView);

privato void fixScrollViewHeight (ScrollView scrollView) {
int screenHeight = activity.getWindowManager(). GetDefaultDisplay(). GetHeight();
LayoutParams lp = scrollView.getLayoutParams();
lp.height = screenHeight/3;
scrollView.setLayoutParams (lp);
}

5

Come detto sopra il modo giusto è quello di utilizzare il android: fillViewport = "true" attributo.

V'è un esempio, in cui l'immagine vill essere posizionata una ie di ScrollView:

<ScrollView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true"> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:fillViewport="true" 
     android:orientation="vertical"> 

     <LinearLayout 
     android:layout_height="fill_parent" 
     android:layout_width="wrap_content" 
     android:orientation="vertical" 
     android:layout_weight="1"> 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="test"/> 
     </LinearLayout> 


     <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="@color/red"> 
     <ImageView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:adjustViewBounds="true" 
      android:src="@drawable/about_us_image_1_land" 
      style="@style/layout_marginTop20"/> 
     </LinearLayout> 
    </LinearLayout> 
    </ScrollView> 
+1

Invece di fill_parent dovresti davvero usare match_parent. +1 per l'esempio! – Nathan

Problemi correlati