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:
- Tipo de entrada de EditText textCapSentences no funciona en Lollipop
- Ajuste el botón de inicio de ActionBar a la derecha
- Añadir diseño como una vista en Android
- Scrollview puede alojar sólo un hijo directo
- Diferentes diseños de filas en ListView
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" />
- Cómo eliminar el relleno / margen del diseño predeterminado
- Google Maps Android API V2 ennegrece parte del diseño
- Leer atributos de Android en mi vista personalizada
- Mostrar texto dinámico en una vista de Android
- RecyclerView: Inconsistencia detectada. Posición de artículo no válida
- Obtener errores en el desarrollo de Android "R no se puede resolver a una variable" y en el diseño también
- Cómo cambiar el texto en datepicker?
- cambiando el fondo de RadioButton cubrió el texto en radiobutton android
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í.
- Uso del hebreo con el emulador de Android
- ¿Hay alguna manera de insertar un ImageSpan en un TextView sin interrumpir el texto?