studio programacion para móviles español edición desarrollo desarrollar curso aprende aplicaciones java android view gravity

java - programacion - Establecer la gravedad de una vista programáticamente



manual programacion android español pdf (3)

Estoy trabajando en una View sobre el código fuente de Android. Me preguntaba cómo podemos configurar múltiples gravidades, a una View personalizada

Este es el XML

<com.android.systemui.statusbar.policy.Clock android:id="@+id/clock" android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:layout_width="wrap_content" android:layout_height="match_parent" android:singleLine="true" android:paddingLeft="6dip" android:gravity="center_vertical|left" />

Como ve, la gravedad predeterminada es center_vertical left, por lo que mi código Java debería ser algo como esto

View clock = mStatusBarView.findViewById(R.id.clock); if (clock != null) { SOMEHOW SET GRAVITY -> mCenterClock ? Gravity.CENTER : (Gravity.CENTER_VERTICAL | Gravity.LEFT); }

El método setGravity no funciona en la View . Entonces, ¿hay una alternativa de establecer la gravedad sin perder el ancho y la altura por defecto?

Gracias por adelantado.


¿Has probado?

clock.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL);

Editar:

Como no puede usar setGravity para una View simple, haga algo como esto,

Puedes usar un RelativeLayout y establecer una regla como esta ...

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); params.addRule(RelativeLayout.CENTER_HORIZONTAL|RelativeLayout.CENTER_IN_PARENT, clock.getId());


Dado que com.android.systemui.statusbar.policy.Clock extiende TextView, simplemente lo convierte en un TextView y establece la gravedad.

TextView clock = (TextView) mStatusBarView.findViewById(R.id.clock); clock.setGravity(mCenterClock ? Gravity.CENTER : (Gravity.CENTER_VERTICAL | Gravity.LEFT));

Ref: código fuente


com.android.systemui.statusbar.policy.Clock clock = (com.android.systemui.statusbar.policy.Clock)mStatusBarView.findViewById(R.id.clock); clock.setGravity(Gravity.CENTER_VERTICAL);

pruebe el código anterior y elimine View clock = mStatusBarView.findViewById (R.id.clock);