GetMeasuredHeight () y el ancho que devuelve 0 después de measure ()

Estoy realmente confundido con esta cosa de medición completa que android hace para los diseños. Básicamente, quiero obtener la altura real computada y el ancho de una vista cuando se ha establecido ANTES de que se establezca. Necesito obtener la altura y el ancho calculados porque tengo un LinearLayout oculto que quiero animar al abrir usando viewpropertyanimator. Necesito proporcionar el ancho de destino (que es el ancho calculado) al animador antes de animarlo. El ancho de este diseño es dinámico porque se basa en su parámetro android:weight para el ancho, por lo que no puedo dar un valor estático.

Aquí está mi clase de actividad:

 package com.example.testproject; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.Log; import android.view.Display; import android.view.View; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; public class TestActivity extends Activity { private LinearLayout gmailListContainer, yahooMailListContainer, windowsLiveListContainer; private LinearLayout emailMessageContainer; private Display display; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_test); gmailListContainer = (LinearLayout) this.findViewById(R.id.email_activity_gmail_layout); yahooMailListContainer = (LinearLayout) this.findViewById(R.id.email_activity_yahoo_mail_layout); windowsLiveListContainer = (LinearLayout) this.findViewById(R.id.email_activity_windows_live_layout); emailMessageContainer = (LinearLayout) this.findViewById(R.id.email_activity_email_content_layout); gmailListContainer.setBackgroundColor(Color.CYAN); yahooMailListContainer.setBackgroundColor(Color.MAGENTA); windowsLiveListContainer.setBackgroundColor(Color.GREEN); emailMessageContainer.setBackgroundColor(Color.RED); display = getWindowManager().getDefaultDisplay(); setMeasuredDimensions(); } private void setMeasuredDimensions() { View v = this.findViewById(R.id.email_activity_layout); v.measure(display.getWidth(), display.getHeight()); Log.v("EmailActivity", v.getMeasuredHeight() + ", " +v.getMeasuredWidth()); } private void setWeight(LinearLayout container, float weight) { LinearLayout.LayoutParams params = (LayoutParams) container.getLayoutParams(); params.weight = weight; container.setLayoutParams(params); container.setVisibility(View.VISIBLE); } } 

Aquí está el recurso de diseño relevante:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/email_activity_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:baselineAligned="false"> <LinearLayout android:id="@+id/email_activity_gmail_layout" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" /> <LinearLayout android:id="@+id/email_activity_yahoo_mail_layout" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" /> <LinearLayout android:id="@+id/email_activity_windows_live_layout" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" /> <LinearLayout android:id="@+id/email_activity_email_content_layout" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="0" /> 

Añada el siguiente método a su actividad y llame a su método de la misma.

 @Override public void onWindowFocusChanged(boolean hasFocus) { setMeasuredDimensions(); super.onWindowFocusChanged(hasFocus); } 

En onCreate () no puede asegurar que su vista se dibuja. Puede tomar algún tiempo. Pero este método anterior se llama sólo cuando la vista se dibuja completamente. Así que usted debe ser capaz de obtener el ancho y la altura exactamente aquí.

  • Gesto MultiSelect como la aplicación Google Fotos
  • FragmentTabHost - No se conoce ninguna pestaña null
  • InputType = "number" con más de una línea
  • Cómo determinar la dirección de desplazamiento de ListView
  • Diseño de una aplicación para Android sólo para tablets
  • Cómo cambiar ¿Cambiar texto a lado derecho en android?
  • Cómo colorear el contorno de mi texto negro en xml para android
  • ¿La publicación de Runnable a un hilo de interfaz de usuario garantiza que el diseño esté terminado cuando se ejecuta?
  • La vista personalizada de Android vuelve a la posición original al actualizar
  • EditText añadido no es un TextInputEditText. Por favor, cambie a usar esa clase en su lugar
  • diseño con barra superior, barra inferior y espacio restante vista de contenido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.