2012-02-09 11 views
6

qui tu sei il mio problema: voglio fare un layout che assomiglia questa griglia in Android:TableLayout e il pulsante di Android ridimensionare

enter image description here

Per farlo, ho creato questo layout:

 <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:orientation="vertical" > 


    <TableLayout 
    android:id="@+id/tableLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <TableRow 
     android:id="@+id/tableRow1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.3"> 

     <Button 
      android:id="@+id/clientimain" 
      android:layout_width="0dip" 
      android:layout_weight="1" android:layout_height="fill_parent"/> 



     <Button 
      android:id="@+id/button1" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="Button" /> 

    </TableRow> 

    <TableRow 
     android:id="@+id/tableRow2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.3" > 

     <Button 
      android:id="@+id/button2" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="Button"/> 

     <Button 
      android:id="@+id/button6" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="Button" /> 

    </TableRow> 

    <TableRow 
     android:id="@+id/tableRow3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.3" > 

     <Button 
      android:id="@+id/button3" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="Button" 
      /> 

     <Button 
      android:id="@+id/button7" 
      android:layout_width="0dip" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="Button" 
      /> 

    </TableRow> 

    </TableLayout> 

    </RelativeLayout> 

Quindi in pratica è composto da 6 pulsanti in una disposizione di tabella con la proprietà di peso impostata correttamente (o lo spero!). Il risultato sembra buono fino a quando cercherò di impostare la proprietà di sfondo di ogni pulsante. In tal caso, il pulsante prende l'altezza dell'immagine inserita (la larghezza è ok). Per esempio, se ho impostato l'immagine di sfondo che il formato è 96px x 96px il risultato simile a questa:

enter image description here

C'è un modo per evitare che questo pulsante "tratto" e per centrare correttamente l'immagine? Ho provato a modificare la proprietà height per ogni riga della tabella, a modificare la proprietà di altezza massima del pulsante e anche a modificare il tipo di pulsante con un imagebutton (e impostare la proprietà src con l'icona desiderata) ma non ho completato la richiesta risultato.
Ho anche redato la documentazione di google sul supporto di più schermate e su ciascun layout di base, ma non ho trovato alcuna soluzione. Grazie in anticipo a tutti quelli che vorrebbero aiutarmi!

Andrea

+0

provare e utilizzare android: scaleType = "fitXY" sul pulsante. prova anche a utilizzare http://developer.android.com/resources/tutorials/views/hello-gridview.html per questa attività –

+0

Ho provato l'attributo android: scaleType = "fitXY" ma non ha funzionato. Proverò a passare al layout della griglia se non riesco a trovare una soluzione. Grazie – jiraya85

risposta

3

Impostare l'altezza di layout della riga di tabella come 0dip e impostare il peso da 1

<TableRow 
      android:id="@+id/tableRow1" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" > 

Questo dovrebbe risolvere il problema


Change

<Button 
      android:id="@+id/clientimain" 
      android:layout_width="0dip" 
      android:layout_weight="1" android:layout_height="fill_parent"/> 

a

<Button 
      android:id="@+id/clientimain" 
      android:layout_width="0dip" 
      android:layout_weight="1" android:layout_height="fill_parent"/> 

questo potrebbe funzionare, la pena di provare, in Eclipse per me rende giusto come l'avevi prima, forse si potrebbe provare a pulire il vostro progetto (Progetto> progetto pulito), perché dovrebbe essere proprio come è


codice Si dovrebbe essere simile a questo:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:orientation="vertical" > 


    <TableLayout 
     android:id="@+id/tableLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <TableRow 
      android:id="@+id/tableRow1" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" > 

      <Button 
       android:id="@+id/clientimain" 
       android:layout_width="0dip" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" /> 

      <Button 
       android:id="@+id/button1" 
       android:layout_width="0dip" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:text="Button" /> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow2" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" > 

      <Button 
       android:id="@+id/button2" 
       android:layout_width="0dip" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:text="Button" /> 

      <Button 
       android:id="@+id/button6" 
       android:layout_width="0dip" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:text="Button" /> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow3" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" > 

      <Button 
       android:id="@+id/button3" 
       android:layout_width="0dip" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:text="Button" /> 

      <Button 
       android:id="@+id/button7" 
       android:layout_width="0dip" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:text="Button" /> 
     </TableRow> 
    </TableLayout> 

    </RelativeLayout> 

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:orientation="vertical" > 


    <TableLayout 
     android:id="@+id/tableLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 


     <TableRow 
      android:id="@+id/tableRow1" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" > 

      <ImageButton 
       android:id="@+id/imageButton1" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/ic_launcher" /> 

      <ImageButton 
       android:id="@+id/imageButton2" 
       android:layout_width="0dp" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:src="@drawable/ic_launcher" /> 
     </TableRow> 


     <TableRow 
      android:id="@+id/tableRow2" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" > 

      <ImageButton 
       android:id="@+id/imageButton3" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:src="@drawable/ic_launcher" /> 

      <ImageButton 
       android:id="@+id/imageButton4" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:src="@drawable/ic_launcher" /> 
     </TableRow> 


     <TableRow 
      android:id="@+id/tableRow3" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" > 

      <ImageButton 
       android:id="@+id/imageButton5" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:src="@drawable/ic_launcher" /> 

      <ImageButton 
       android:id="@+id/imageButton6" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:src="@drawable/ic_launcher" /> 
     </TableRow> 

    </TableLayout> 

    </RelativeLayout> 

continua a non cambiare nulla, quanto è grande la dimensione dell'immagine?

+0

Ho già provato a farlo ma senza risultato.Ora ogni riga della tabella ha le proprietà (altezza 0 e peso 1), ma ho ancora quel tratto. Grazie – jiraya85

+0

Innanzitutto grazie per il vostro supporto. Ho provato a pulire il progetto e anche a sostituire il mio codice con il tuo, ma quando seleziono un'immagine di sfondo, ho ancora lo stesso problema. Se non applico alcuna immagine sullo sfondo del pulsante, tutto va bene e la griglia sembra come volevo! – jiraya85

+0

Hmm ok, prova con le immagini quindi, aspetta un po ', torna indietro – FabianCook

0

Quando ho applicato l'immagine di sfondo come

android:background="@drawable/ic_launcher" 

ha funzionato bene.

Ho pensato che fosse a causa delle dimensioni dell'immagine così ho applicato l'altra immagine con dimensione 160X160 e il problema è tornato. Poi ho applicato la stessa immagine 160X160 a tutti i pulsanti e si sono allineati perfettamente. Ecco il mio codice (L'immagine Gender.png è di 160x160 pixel)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/RelativeLayout1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="center" 
android:orientation="vertical" > 

<TableLayout 
android:id="@+id/tableLayout1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_weight="0.3"> 

    <Button 
     android:id="@+id/clientimain" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:background="@drawable/Gender" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:text="Button" 
     android:background="@drawable/Gender"/> 

</TableRow> 

<TableRow 
    android:id="@+id/tableRow2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.3" > 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:text="Button" 
     android:background="@drawable/Gender"/> 

    <Button 
     android:id="@+id/button6" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:text="Button" 
     android:background="@drawable/Gender"/> 

</TableRow> 

<TableRow 
    android:id="@+id/tableRow3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.3" 
    > 

    <Button 
     android:id="@+id/button3" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:text="Button" 
     android:background="@drawable/Gender" /> 

    <Button 
     android:id="@+id/button7" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:text="Button" 
     android:background="@drawable/Gender"/> 

</TableRow> 


    <TableRow 
    android:id="@+id/tableRow4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.3" > 

    <Button 
     android:id="@+id/button77" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:text="Button" 
     android:background="@drawable/Gender" 
     /> 

    <Button 
     android:id="@+id/button75" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:text="Button" 
     android:background="@drawable/Gender" 
     /> 

</TableRow> 


</TableLayout> 

1

io so che non è esattamente quello che voleva, ma mi consiglia di utilizzare GridView invece di layout di TableRow.

Penso che GridView dovrebbe funzionare meglio perché come implementato con view recycling e roba ereditata da AbsListView. GridView è più difficile da implementare perché devi usare con Adapter ma funzionerà in modo efficiente se hai un sacco di pesanti viste da caricare, come le immagini. Reference.

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridView1" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" 
    android:columnWidth="100dp" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

</GridView> 
Problemi correlati