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);