Autore Topic: Lunghezza testo in textView  (Letto 1131 volte)

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Lunghezza testo in textView
« il: 15 Gennaio 2012, 22:23:51 CET »
0
Ciao, ho una listView con delle textView, come faccio a fare in modo che il testo venga tagliato quando ha una lunghezza maggiore della larghezza dello schermo ??

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Lunghezza testo in textView
« Risposta #1 il: 15 Gennaio 2012, 22:26:49 CET »
0
Guarda qui: ellipsize
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Re:Lunghezza testo in textView
« Risposta #2 il: 15 Gennaio 2012, 22:37:34 CET »
0
Guarda qui: ellipsize


Avevo già provato con quella, ho provato con tutti gli attributi ma nulla.

Codice (Java): [Seleziona]
                <TextView android:layout_height="wrap_content"
                              android:layout_width="fill_parent"
                              android:focusableInTouchMode="true"
                                  android:layout_toRightOf="@+id/nameFileLabel"
                              android:layout_alignParentRight="true"
                              android:paddingLeft="10px"
                                  android:textColor="@color/green"
                                  android:id="@+id/nameResourceFile"
                                  android:lines="1"
                                  android:ellipsize="start"/>

Ottengo sempre come in allegato

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Lunghezza testo in textView
« Risposta #3 il: 15 Gennaio 2012, 23:07:39 CET »
0
Prova a sostituire android:lines="1" con android:singleLine="true"
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Re:Lunghezza testo in textView
« Risposta #4 il: 15 Gennaio 2012, 23:29:56 CET »
0
Prova a sostituire android:lines="1" con android:singleLine="true"

Niente.. è molto strano  :-(

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Lunghezza testo in textView
« Risposta #5 il: 15 Gennaio 2012, 23:37:56 CET »
0
A me funziona con ellipsize="marquee" e singleLine="true"
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:Lunghezza testo in textView
« Risposta #6 il: 16 Gennaio 2012, 18:45:59 CET »
0
da codice è semplice. Però devi vedere te quanti caratteri ci stanno....

Codice: [Seleziona]
if (stringa.length()>lunghezza_max)
{
        stringa = stringa.substring(0, lunghezza_max);
}

Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Re:Lunghezza testo in textView
« Risposta #7 il: 16 Gennaio 2012, 20:09:49 CET »
0
da codice è semplice. Però devi vedere te quanti caratteri ci stanno....

Codice: [Seleziona]
if (stringa.length()>lunghezza_max)
{
        stringa = stringa.substring(0, lunghezza_max);
}

Però questo non dipende dalla larghezza del display ? Come faccio a priori a sapere quanti caratteri saranno visualizzati ??

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
Re:Lunghezza testo in textView
« Risposta #8 il: 16 Gennaio 2012, 20:37:44 CET »
+1
hai ragione, non ti dice a priori quanti caratteri ci stanno.
però partendo dalla larghezza in pixel e con un po' di prove puoi vederlo.

Ovviamente se qualcuno ha metodi migliori non devi farti questo sbatti.

In ogni caso per vedere la larghezza in pixel dello schermo puoi usare:

Codice: [Seleziona]
Display display = getWindowManager().getDefaultDisplay();
                        width = display.getWidth();
Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Lunghezza testo in textView
« Risposta #9 il: 17 Gennaio 2012, 11:55:58 CET »
0
Ciao! Secondo me il problema potrebbe essere nell'inflate dell'adapter che va a creare problemi al fill_parent della larghezza. Potresti postare il metodo getView() dell'adapter e il codice completo del layout della riga?  ;-)
« Ultima modifica: 17 Gennaio 2012, 11:57:48 CET da Verandi »

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Re:Lunghezza testo in textView
« Risposta #10 il: 17 Gennaio 2012, 21:06:22 CET »
0
Il codice completo della riga:

Codice (Java): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:layout_width="fill_parent"
                         xmlns:android="http://schemas.android.com/apk/res/android"
                         android:id="@+id/row_container"
                         android:padding="7px"
                         android:layout_height="wrap_content"
                         android:background="@drawable/my_drawable"
                         android:shrinkColumns="0">
 
        <TableRow>
                                   
        <ImageView android:id="@+id/resourceType"
                           android:layout_height="47px"
                           android:layout_width="47px"/>
       
        <LinearLayout android:orientation="vertical"
                                  android:layout_width="fill_parent"
                                  android:layout_height="fill_parent">
                                 
                <TextView android:layout_height="wrap_content"
                              android:layout_width="420px"
                              android:focusableInTouchMode="true"
                                  android:layout_toRightOf="@+id/nameFileLabel"
                              android:layout_alignParentRight="true"
                              android:paddingLeft="10px"
                                  android:textColor="@color/green"
                                  android:id="@+id/nameResourceFile"
                                  android:singleLine="true"
                                  android:ellipsize="marquee"/>
               
        <LinearLayout android:orientation="horizontal"
                                  android:layout_width="fill_parent"
                                  android:layout_height="fill_parent">  


       
                <ImageView android:id="@+id/resourceAvailable"
                                   android:layout_height="20px"
                                   android:layout_width="20px"/>    
                                                                       
        <TextView android:text=""
                  android:layout_height="wrap_content"
                  android:textSize="15px"
                  android:textColor="@color/white"
                  android:paddingLeft="10px"  
                  android:layout_width="wrap_content"  
                  android:id="@+id/textFileSize"/>  
   
           
    </LinearLayout>
       
    </LinearLayout>
        </TableRow>

</TableLayout>


Questo è il codice con cui riempio la listView

Codice (Java): [Seleziona]
                ListView listView = (ListView) findViewById(R.id.arrayListMyResources); // Otteniamo il riferimento alla ListView
                 
                ArrayAdapter<CustomItem> arrayAdapter = new ArrayAdapter<CustomItem>(   // Creiamo l'ArrayAdapter
                                this, R.layout.custom_row_my_resources,  items) {
                                        @Override
                                        public View getView(int position, View convertView, ViewGroup parent){ 
                                                // Caso di utilizzo dell'Holdedr
                                                return getViewHolder(position,convertView,parent);  }

                        public View getViewHolder(int position, View convertView, ViewGroup parent) {
                               
                                ViewHolder viewHolder = null; // Creiamo il riferimento all'holder

                                // Se non presente una istanza della View la creiamo attraverso inflating. Se gia presente la riutilizziamo
                                if(convertView==null){
                                        // Otteniamo il riferimento alla View da parserizzare
                                        LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                        convertView = inflater.inflate(R.layout.custom_row_my_resources, null);
                                        viewHolder = new ViewHolder(); // Creiamo un Holder associato
                                       
                                        // Assegnamo i riferimenti alle textView
                                        viewHolder.fileView = (TextView)convertView.findViewById(R.id.nameResourceFile);
                                        viewHolder.sizeFile = (TextView)convertView.findViewById(R.id.textFileSize);
                                        viewHolder.imageResources = (ImageView)convertView.findViewById(R.id.resourceType);
                                        viewHolder.imageAvailable = (ImageView)convertView.findViewById(R.id.resourceAvailable);

                                        // Lo assegnamo come Tag della View
                                        convertView.setTag(viewHolder);
                                       
                                }//if
                                else{ viewHolder = (ViewHolder)convertView.getTag(); }  // La View esiste gia' per cui possiede gia' l'holder
                               
                                final CustomItem item = getItem(position);      // Otteniamo l'elemento i-esimo
                                // Assegnamo i valori
                                viewHolder.fileView.setText(item.nameFile); //setto valore label:valore
                                        int sizeKb;
                                        if(Integer.valueOf(item.size) > 1000){
                                                sizeKb = (Integer.parseInt(item.size)/1000);
                                viewHolder.sizeFile.setText(String.valueOf(sizeKb)+ " KB\t");} //setto valore label:valore
                                        else viewHolder.sizeFile.setText(item.size+" bytes\t");
                                       
                                assegnaIcona(viewHolder,item); //assegna l'icona in base al tipo di file
                               
                                if(item.type.equals("file")){
                                        if(item.available.equals("true"))
                                                viewHolder.imageAvailable.setImageDrawable(getResources().getDrawable(R.drawable.bullet_green));
                                        else
                                                viewHolder.imageAvailable.setImageDrawable(getResources().getDrawable(R.drawable.bullet_red));
                                                }
                                //evento di click normale (gestione)
                                convertView.setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View arg0) {         
                                        if( item.type.equals("file") ){
                                                fileName = item.nameFile;
                                                showDialog(DOWNLOAD_PREVIEW);
                                        }
                                        else  
                                        {
                                                stack.push(urlInit);
                                                urlCurrent = "http://"+getConfiguration(this).getProperty("hostname")+":"+getConfiguration(this).getProperty("port")+item.urlResource+"?output=json" ;
                                                generaLayoutResources("http://"+getConfiguration(this).getProperty("hostname")+":"+getConfiguration(this).getProperty("port")+item.urlResource+"?output=json") ;
                                        }
                                }});
                               
                        // Gestiamo l'evento di long click
                        OnLongClickListener longClickListener = new OnLongClickListener(){
                                @Override
                                public boolean onLongClick(View v) { return false; }};                         
                        convertView.setOnLongClickListener(longClickListener); 
                                // Ritorniamo la View
                                return convertView;
                        }                      
                };
                // Lo impostiamo come adapter della listView
                listView.setAdapter(arrayAdapter);
            registerForContextMenu(listView);
                                         
                }//try
                catch (JSONException e) { e.printStackTrace(); }

Grazie mille !



hai ragione, non ti dice a priori quanti caratteri ci stanno.
però partendo dalla larghezza in pixel e con un po' di prove puoi vederlo.

Ovviamente se qualcuno ha metodi migliori non devi farti questo sbatti.

In ogni caso per vedere la larghezza in pixel dello schermo puoi usare:

Codice: [Seleziona]
Display display = getWindowManager().getDefaultDisplay();
                        width = display.getWidth();

Grazie, per ora utilizzo questa, limitando la lunghezza massima della textview !

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Lunghezza testo in textView
« Risposta #11 il: 17 Gennaio 2012, 21:09:58 CET »
+1
Prova a vedere se funziona cambiando questa  riga:
Codice (Java): [Seleziona]
  convertView = inflater.inflate(R.layout.custom_row_my_resources, parent, false);
E ripristinando il fill_parent nella textview
 ;-)
« Ultima modifica: 17 Gennaio 2012, 21:12:13 CET da Verandi »

Offline Matteo87

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
Re:Lunghezza testo in textView
« Risposta #12 il: 17 Gennaio 2012, 22:22:36 CET »
0
Prova a vedere se funziona cambiando questa  riga:
Codice (Java): [Seleziona]
  convertView = inflater.inflate(R.layout.custom_row_my_resources, parent, false);
E ripristinando il fill_parent nella textview
 ;-)

Nada, ho risolto così però:

Codice (Java): [Seleziona]
        Display display = getWindowManager().getDefaultDisplay();
                        int width = display.getWidth();
                        viewHolder.fileView.setWidth( width-57 );

Non sarà il massimo ma funziona . Con l'attributo android:ellipsize="middle" i puntini sono correttamente nel mezzo del nome !

Grazie  ;-)