android - título - ¿Cómo obtener el tamaño visible en una actividad?
modificar la barra de título de una aplicación android (7)
Consigue la altura de la actividad:
public static int getActivityHeight(Activity activity)
{
return activity.findViewById(android.R.id.content).getHeight();
}
Obtener el ancho de la actividad.
public static int getActivityWidth(Activity activity)
{
return activity.findViewById(android.R.id.content).getWidth();
}
¿Cómo puedo saber el tamaño visible de mi actividad?
Estoy tratando de obtener la Actividad de tamaño real,
no la altura y el ancho de getHeight()
y getWidth()
,
Lo que me da la pantalla a tamaño completo.
Hay una forma sencilla de obtener el tamaño de Vista correcto usando la función getDefaultSize
. En el caso de que la Vista se extienda a toda la actividad, puede usar el siguiente enfoque para obtener las dimensiones de región de cliente de actividad:
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int viewWidth = getDefaultSize(getWidth(), widthMeasureSpec);
int viewHeight = getDefaultSize(getHeight(), heightMeasureSpec);
...
}
Para hacer que la vista se extienda a toda la actividad:
MyView testView = new MyView(this);
LinearLayout testViewGroup = new LinearLayout(this);
testView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
testViewGroup.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);
testViewGroup.addView(testView);
setContentView(testViewGroup);
He encontrado una forma de saber la altura exacta de mi actividad: si tiene una vista que llena toda la pantalla disponible detrás de la barra de título y la barra de tareas, simplemente use getBottom()
para obtener la altura real de esa actividad.
Hice eso con mi diseño raíz, el problema es que no puede obtener esta información (ancho y alto) en sus métodos onCreate / onStart / onResume cuando se ejecutan por primera vez.
En cualquier momento posterior, se puede recuperar el tamaño de su diseño raíz (LinearLayout / FrameLayout / TableLayout / etc), en mi caso, estaba usando FrameLayout:
FrameLayout f = (FrameLayout) findViewById(R.id.layout_root);
Log.d(TAG, "width " + f.getMeasuredWidth() );
Log.d(TAG, "height " + f.getMeasuredHeight() );
o:
FrameLayout f = (FrameLayout) findViewById(R.id.layout_root);
Log.d(TAG, "width " + f.getRight() );
Log.d(TAG, "height " + f.getBottom() );
Editado desde aquí ----------------------------------------------- ---------
Encontré una forma de obtener esta información en el método onCreted, pero solo si tiene más de una actividad. En mi caso tengo una actividad principal que llama segunda actividad.
En main_activity antes de llamar a second_activity, mediante un nuevo Itent, puedo agregar información adicional para la second_activity. Aquí está el código que necesitas en la primera actividad:
Intent i = new Intent(this, SecondActivity.class);
i.putExtra("width", f.getMeasuredWidth());
i.putExtra("height", f.getMeasuredHeight());
startActivity(i);
Después de eso, en su segunda actividad, puede recuperar esta información sobre el método onCreate de su segunda actividad haciendo eso:
int width = getIntent().getExtras().getInt("width");
int height = getIntent().getExtras().getInt("height");
Me gustan más las respuestas que ahorran tiempo:
myActivity.getWindow().getDecorView().getHeight();
myActivity.getWindow().getDecorView().getWidth();
Si está utilizando DataBinding (que debería ser), puede llamar a binding.getRoot().getHeight()
donde binding
es su ViewDataBinding
creado con DataBindingUtil.setContentView()
u otro método DataBindingUtil
. Tendrá que esperar hasta que el diseño tenga tamaño, lo que puede hacer así:
binding.getRoot().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
binding.getRoot().getViewTreeObserver().removeOnGlobalLayoutListener(this);
int height = binding.getRoot().getHeight();
}
});
Tenga en cuenta que debe eliminar OnGlobalLayoutListener o, de lo contrario, se ejecutará cada vez que algo cambie en su diseño.
Creo que querrás mirar Activity.getWindow()
y Window.getDecorView()
, y obtener el ancho / alto de eso.