Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [Android] Creazione tabella e dimensionamento colonne

    In una mia applicazione android ho un'activity così composta:
    miaActivity.jpg
    All'interno del TableLayout vorrei costruire una tabella a n righe e 5 colonne.
    Costruisco la tabella attraverso l'inserimento in stile lista di n TableRow, e ognuna di esse contiene 5 TextView.
    Bene, ora vorrei che ciascuna "colonna" avesse una dimensione be definita e non uniforme per tutti. Chiamata x la lunghezza (width) della TableLayout vorrei che le 5 colonne avessero rispettivamente le seguenti dimensioni: 0.6x,0.1x,0.1x,0.1x,0.1x
    Per rendere l'idea un qualcosa del genere
    TableRow.jpg
    Per far ciò ho fatto qualcosa del genere all'interno del "onCreate" dell'Activity:
    codice:
    TableLayout tl = (TableLayout) findIdByView (R.id.nomeTableLayout);
    int w = tl.getWidth ();
    LayoutParams param=new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
    TableRow tr = new TableRow (this); 
    tr.setLayoutParams(param);
    for (int i=0;i<numeroColonne;i++) {
       TextView tv = new TextView (this);
       tv.setWidth((int)(w * (i==0 ? 0.6 : 0.1)));
       tv.setText ("col" + i);
       tv.setTag (tr);
       tr.addView (tv);
    }
    tl.addView (tr);
    Ma così facendo non mi viene visualizzato niente poichè w risulta essere zero.
    Ho provato a settare w come tl.getMeasuredWidth () e anche provando a prendere le dimensioni all'interno del metodo onPostCreate dell'activity ma sempre lo stesso risultato.

    Come potrei risolvere?
    Ultima modifica di valentino46; 06-01-2015 a 21:57

  2. #2
    hai provato a vedere l'attributo anrdoi:layout_weight?

    prova a vedere anche questo esempio: http://www.codeproject.com/Questions...ut-height-to-t

  3. #3
    Quote Originariamente inviata da fermat Visualizza il messaggio
    hai provato a vedere l'attributo anrdoi:layout_weight?
    Non sono sicuro di aver capito bene come usarlo ma ho fatto così, non ottenendo risultati positivi:
    codice:
    TableLayout tl =(TableLayout) findIdByView (R.id.nomeTableLayout);int w = tl.getWidth ();
    LayoutParams param=newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
    LinearLayout.LayoutParams param6 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT, 6.0f);
    LinearLayout.LayoutParams param1 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT, 1.0f);
    
    TableRow tr =newTableRow(this); 
    tr.setLayoutParams(param);
    for(int i=0;i<numeroColonne;i++){
       TextView tv =newTextView(this);
       tv.setLayoutParams(i == 0 ? param6 : param1);
       tv.setText ("col"+ i);
       tv.setTag (tr);
       tr.addView (tv);
    }
    tl.addView (tr);
    Cosa ho sbagliato??
    Ultima modifica di valentino46; 06-01-2015 a 23:08

  4. #4
    ma perchè non usi i file di layout invece che fare tutto da codice???

  5. #5
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ma perchè non usi i file di layout invece che fare tutto da codice???
    Perchè in realtà non sono molto pratico con gli xml.
    Dimmi se sbaglio:
    ho creato il seguente xml chiamato mia_textview.xml nella cartella res/layout del progetto:

    codice:
    <?xml version="1.0" encoding="utf-8"?><resources xmlns:android="http://schemas.android.com/apk/res/android">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="6.0f"
            android:text="@string/app_name"
            android:layout_gravity="center"
            />
    </resources>
    Ora dovrei richiamarlo da codice ma non ho ben capito come fare, so che con il findViewById posso prendere le view nel xml dell'activity..e se si tratta di un altro xml??
    Ultima modifica di valentino46; 07-01-2015 a 15:45

  6. #6
    scusa se te lo dico così, però qualsiasi tutorial / libro spiega questa cosa come secondo argomento (il primo in genere è l'installazione dell'sdk e il ciclo di vita di una activity).

    forse dovresti studiarti qualche tutorial di base!

    anche perchè i layout in android si gestiscono tramite file xml, e vengono manipolati da codice solo in via eccezionale.

    detto ciò, in questo link c'è un esempi di table layout con quello che ti dicevo: http://www.go4expert.com/articles/pa...cation-t30169/

    le righe vengono prese da un servizio json, ma di base il layout è quello.
    dagli un'occhiata!

  7. #7
    Quote Originariamente inviata da fermat Visualizza il messaggio
    scusa se te lo dico così, però qualsiasi tutorial / libro spiega questa cosa come secondo argomento (il primo in genere è l'installazione dell'sdk e il ciclo di vita di una activity).

    forse dovresti studiarti qualche tutorial di base!

    anche perchè i layout in android si gestiscono tramite file xml, e vengono manipolati da codice solo in via eccezionale.

    detto ciò, in questo link c'è un esempi di table layout con quello che ti dicevo: http://www.go4expert.com/articles/pa...cation-t30169/

    le righe vengono prese da un servizio json, ma di base il layout è quello.
    dagli un'occhiata!
    Hai perfettamente ragione, ma una cosa in particolare non mi è chiara:
    ammettiamo che io crei un Layout xml, supponiamo un LinearLayout con allineamento verticale, che nella definizione avrà 3 Button, poi dinamicamente (a livello di programmazione) se volessi inserire più bottoni?Come dovrei fare?Mi basterebbe fare da codice "addView (mioBottone)"?Ma così facendo non perderei (se non impostate esplicitamente nel codice) i parametri di layout?
    Scusa le domande stupide ma per motivi di tempo, come tu stesso hai notato, ho saltato dei concetti basilari..

  8. #8
    Quote Originariamente inviata da valentino46 Visualizza il messaggio
    Hai perfettamente ragione, ma una cosa in particolare non mi è chiara:
    ammettiamo che io crei un Layout xml, supponiamo un LinearLayout con allineamento verticale, che nella definizione avrà 3 Button, poi dinamicamente (a livello di programmazione) se volessi inserire più bottoni?Come dovrei fare?Mi basterebbe fare da codice "addView (mioBottone)"?Ma così facendo non perderei (se non impostate esplicitamente nel codice) i parametri di layout?
    Scusa le domande stupide ma per motivi di tempo, come tu stesso hai notato, ho saltato dei concetti basilari..
    se devo essere sincero non lo so.
    nel senso che non mi è ancora capitato di aggiungere componenti in maniera dinamica.
    ma in generale penso ci sia un meccanismo per gestire queste situazioni, sennò non avrebbero senso i file di layout.

  9. #9
    Quote Originariamente inviata da valentino46 Visualizza il messaggio
    Hai perfettamente ragione, ma una cosa in particolare non mi è chiara:
    ammettiamo che io crei un Layout xml, supponiamo un LinearLayout con allineamento verticale, che nella definizione avrà 3 Button, poi dinamicamente (a livello di programmazione) se volessi inserire più bottoni?Come dovrei fare?Mi basterebbe fare da codice "addView (mioBottone)"?Ma così facendo non perderei (se non impostate esplicitamente nel codice) i parametri di layout?
    Scusa le domande stupide ma per motivi di tempo, come tu stesso hai notato, ho saltato dei concetti basilari..
    Bè se chi ha progettato android sarebbe stato "Grullo" può essere....
    Ritornando al tuo esempio se io da codice dovessi aggiungere un ulteriore bottone per prima cosa dovresti fare un findViewById del linearLayout e su di esso invocare l'add quindi ovviamente non perdi e non devi esplicitare nulla di + di quello che hai definito del tuo file xml....

  10. #10
    Seguendo i vostri consigli ho creato un layout xml chiamato custom_linearlayout.xml con all'interno il seguente codice:
    codice:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/custom_linearLayout" >
        <TextView
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="6.0"
            android:id="@+id/titolo1"
            android:text="tit1"
            android:background="#4584d3"
            />
        <TextView
            android:layout_width="2dp"
            android:layout_height="fill_parent"
            android:id="@+id/spazio1"
            />
        <TextView
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:id="@+id/titolo2"
            android:text="tit2"
            android:background="#4584d3"
            />
        <TextView
            android:layout_width="2dp"
            android:layout_height="fill_parent"
            android:id="@+id/spazio2"
            />
        <TextView
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:id="@+id/titolo3"
            android:text="tit3"
            android:background="#4584d3"
            />
        <TextView
            android:layout_width="2dp"
            android:layout_height="fill_parent"
            android:id="@+id/spazio3"
            />
        <TextView
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:id="@+id/titolo4"
            android:text="tit4"
            android:background="#4584d3"
            />
        <TextView
            android:layout_width="2dp"
            android:layout_height="fill_parent"
            android:id="@+id/spazio4"
            />
        <TextView
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:id="@+id/titolo5"
            android:text="tit5"
            android:background="#4584d3"
            />
    
    
    </LinearLayout>
    Esso dovrebbe apparire così:
    rendering.jpg

    Ho creato la seguente classe per poterlo inserire nella mia applicazione:

    codice:
    package blablabla.myapplication;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    
    import zipangulu.myapplication.R;
    
    
    
    public class Riga extends LinearLayout {
    
    
        TextView colonna1, colonna2 , colonna3, colonna4, colonna5;
    
    
        public Riga (Context contesto) {
            super (contesto);
            init ();
        }
    
    
        private void init () {
            LinearLayout ll = (LinearLayout) LayoutInflater.from (getContext()).inflate(R.layout.custom_linearlayout , null);
            colonna1 = (TextView)ll.findViewById(R.id.titolo1);
            colonna2 = (TextView)ll.findViewById(R.id.titolo2);
            colonna3 = (TextView)ll.findViewById(R.id.titolo3);
            colonna4 = (TextView)ll.findViewById(R.id.titolo4);
            colonna5 = (TextView)ll.findViewById(R.id.titolo5);
            addView(ll);
        }
    
    
        public void setVal1 (String s) {
            colonna1.setText(s);
        }
    
    
        public void setVal2 (String s) {
            colonna2.setText(s);
        }
    
    
        public void setVal3 (String s) {
            colonna3.setText(s);
        }
    
    
        public void setVal4 (String s) {
            colonna4.setText(s);
        }
    
    
        public void setVal5 (String s) {
            colonna5.setText(s);
        }
    
    
    
    
        public void setBackgroundColor (int colore) {
            colonna1.setBackgroundColor(colore);
            colonna2.setBackgroundColor(colore);
            colonna3.setBackgroundColor(colore);
            colonna4.setBackgroundColor(colore);
            colonna5.setBackgroundColor(colore);
        }
    
    
        public void setForegroundColor (int colore) {
            colonna1.setTextColor(colore);
            colonna2.setTextColor(colore);
            colonna3.setTextColor(colore);
            colonna4.setTextColor(colore);
            colonna5.setTextColor(colore);
        }
    
    
    }

    E nell'activity richiamo le seguenti istruzioni:
    codice:
    TableLayout tl = (TableLayout)findViewById(R.id.tableLayout); //è il TableLayout che si vede nell'immagine del primo post        
    //INSERISCO UNA RIGA CHE POI SARA' LA BARRA DEI TITOLI
            Riga titoli = new Riga (this);
            tl.addView(titoli);
    ma ciò che mi viene visualizzato è questo:
    Screenshot_2015-01-07-22-34-33.jpg

    Cioè la riga non finisce alla fine del TableLayout ma si arresta a tipo metà, come se ci fosse impostato un "wrap_content"..perchè?Dove sbaglio?Come posso risolvere?
    Ultima modifica di valentino46; 08-01-2015 a 00:09

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.