Autore Topic: ricavare dimensioni layout  (Letto 934 volte)

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
ricavare dimensioni layout
« il: 10 Maggio 2012, 16:34:49 CEST »
0
ragazzi mi sapete dire il motivo per cui non riesco a prendere le dimensioni di un layout?
mi sembra una cosa semplicissima, ma mi restituisce sempre 0 sia come height che come widht O_o.
ho fatto in questo modo:
Codice (XML): [Seleziona]
 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/rl">

        <ImageView
           android:id="@+id/imageView1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_centerHorizontal="true"
           android:layout_centerVertical="true"
           android:src="@drawable/ic_launcher" />

        <TextView
           android:id="@+id/tw"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentLeft="true"
           android:layout_alignParentTop="true"
           android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
           android:id="@+id/th"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentRight="true"
                        android:textAppearance="?android:attr/textAppearanceLarge" />

    </RelativeLayout>
Codice (Java): [Seleziona]
import android.app.Activity;
import android.os.Bundle;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class DimensionelayoutActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        RelativeLayout rl = (RelativeLayout)findViewById(R.id.rl);
        TextView tw = (TextView)findViewById(R.id.tw);
        TextView th = (TextView)findViewById(R.id.th);
        tw.setText(String.valueOf(rl.getWidth()));
        th.setText(String.valueOf(rl.getHeight()));
       
    }
}
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline zaxxon

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Archos 101 G9
  • Sistema operativo:
    Ubuntu 10.04
Re:ricavare dimensioni layout
« Risposta #1 il: 10 Maggio 2012, 17:03:49 CEST »
0
Probabilmente non è ancora terminata la fase di layout e quindi la view non sa ancora quali sono le sue dimensioni.
Prova a spostare queste righe:
Codice (Java): [Seleziona]
RelativeLayout rl = (RelativeLayout)findViewById(R.id.rl);
TextView tw = (TextView)findViewById(R.id.tw);
TextView th = (TextView)findViewById(R.id.th);
tw.setText(String.valueOf(rl.getWidth()));
th.setText(String.valueOf(rl.getHeight()));
dentro al metodo onStart(), qui la View dovrebbe già essere stata disegnata a video almeno una volta quindi le dimensioni dovrebbero essere corrette.

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:ricavare dimensioni layout
« Risposta #2 il: 10 Maggio 2012, 17:13:55 CEST »
0
provato a metterlo in onResume e in onStart, ma rimane sempre 0...
invece mettendolo nell'onpause e mandandolo in pausa, poi mi segna le dimensioni esatte..
però io ho bisogno di queste dimensioni prima che l'utente inizi a utilizzare l'app..come potrei fare per eseguire questo controllo solo dopo che il layout sia stato caricato?
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline zaxxon

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Archos 101 G9
  • Sistema operativo:
    Ubuntu 10.04
Re:ricavare dimensioni layout
« Risposta #3 il: 10 Maggio 2012, 17:40:27 CEST »
0
La prima cosa che mi verrebbe in mente è di scrivere un nuovo Layout, derivato da RelativeLayout e intercettare il metodo onSizeChanged...

Ma mi pare strano non esista un metodo più semplice.

Offline zaxxon

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Archos 101 G9
  • Sistema operativo:
    Ubuntu 10.04
Re:ricavare dimensioni layout
« Risposta #4 il: 10 Maggio 2012, 17:47:49 CEST »
+1
Spulciando gli eventi della Activity mi ispira bene onAttachedToWindow, prova ad intercettarlo e a verificare i valori in quel momento.

Offline IacopoDeeNosee

  • Utente junior
  • **
  • Post: 128
  • Respect: +33
    • Google+
    • iacopodeenosee
    • Mostra profilo
    • visualhunter
  • Dispositivo Android:
    Samsung Nexus S - GT-I9023
  • Play Store ID:
    IacopoDeeNosee
  • Sistema operativo:
    Arch linux x86_64
Re:ricavare dimensioni layout
« Risposta #5 il: 10 Maggio 2012, 18:42:48 CEST »
+1
però io ho bisogno di queste dimensioni prima che l'utente inizi a utilizzare l'app..come potrei fare per eseguire questo controllo solo dopo che il layout sia stato caricato?
ho avuto il tuo stesso problema ed ho risolto implementando il metodo onWindowFocusChanged,questo viene chiamato ogni volta che l'activity riceve il focus perciò ho messo un flag per evitare che l'operazione venisse eseguita sempre.Una soluzione non molto elegante ma funziona.8y3
Codice (Java): [Seleziona]
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
        if (needMeasure) {
                //do something 
                       
                needMeasure = false;
        }
}

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:ricavare dimensioni layout
« Risposta #6 il: 10 Maggio 2012, 19:28:25 CEST »
0
grazie mille ragazzi..stasera ci provo.. strano però che non ci sia un metodo apposito..
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!

Offline frecciak

  • Utente normale
  • ***
  • Post: 231
  • Respect: +16
    • Mostra profilo
  • Dispositivo Android:
    galaxy s
  • Sistema operativo:
    windows 7
Re:ricavare dimensioni layout
« Risposta #7 il: 10 Maggio 2012, 20:55:47 CEST »
0
purtroppo onAttachedToWindow() non va bene..anche qua il layout non è ancora caricato..
invece onWindowFocusChanged è perfetto, perchè alla rotazione del dispositivo riparte la misurazione..quindi lo si può adattare sia a portrait che landscape.
Thanks!
Se le risposte ti hanno aiutato, metti un ..a te non costa nulla, ma a chi ti ha aiutato fa molto piacere riceverlo!!