2011-11-20 18 views

risposta

37
Display display = getWindowManager().getDefaultDisplay(); 
View view = findViewById(R.id.YOUR_VIEW_ID); 
view.measure(display.getWidth(), display.getHeight()); 

view.getMeasuredWidth(); // view width 
view.getMeasuredHeight(); //view height 
+0

Contrassegna come risolto ^^ –

+4

Potresti anche tenere a mente che se la vista non è gonfiata la sua larghezza e altezza saranno 0. – Joru

+0

Hai ragione Joru. Ho usato ViewTreeObserver e ho risolto il mio problema. Grazie a tutti coloro che hanno cercato di rispondere. –

23

@dmytrodanylyk - penso che tornerà larghezza & altezza 0 quindi è necessario utilizzare i seguenti cosa

LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View contentview = inflater.inflate(R.layout.YOURLAYOUTNAME, null, false); 
contentview.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
int width = contentview.getMeasuredWidth(); 
int height = contentview.getMeasuredHeight(); 

Vi darà giusta altezza & larghezza.

+0

Questo è quello che ho bisogno di determinare se dovrei iniziare una nuova riga di checkbox, prima di renderlo un singolo linea e quindi prevenire l'overflow calcolando la larghezza ... perfetto grazie. provenendo da -> http://stackoverflow.com/a/24054428/1815624 – CrandellWS

9

È necessario utilizzare OnGlobalLayoutListener che viene chiamato per le modifiche alla vista, ma prima che venga disegnato.

costumView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    @Override 
    public void onGlobalLayout() { 

     costumView.getWidth(); 

    } 
}); 
2

Mi piace usare questa tecnica come da my answer on a related question:

Pubblica eseguibile da onCreate() che verrà eseguito quando è stata creata la vista:

contentView = findViewById(android.R.id.content); 
    contentView.post(new Runnable() 
    { 
     public void run() 
     { 
      contentHeight = contentView.getHeight(); 
     } 
    }); 

Questo codice verrà eseguito sul thread principale dell'interfaccia utente, dopo che onCreate() è terminato.

0

Questo è il modo migliore ...... LAVORO !!!

public void onWindowFocusChanged(boolean hasFocus) {   
    super.onWindowFocusChanged(hasFocus); 

    if (fondo_iconos_height==0) { // to ensure that this does not happen more than once 
     fondo_iconos.getLocationOnScreen(loc); 
     fondo_iconos_height = fondo_iconos.getHeight(); 
     redraw_function(); 
    } 

} 
5
Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
view.measure(size.x, size.y); 
int width = view.getMeasuredWidth(); 
int height = view.getMeasuredHeight(); 
0
yourView.measure(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
    int yourView= m_hidableRowContainer.getMeasuredHeight(); 

Questo è tutto.

+0

'measure' prende una coppia di costanti intere' View.MeasureSpec', non le costanti param del layout. – Tom

Problemi correlati