Je travaille sur un View
sur Android code source. Je me demandais comment pouvons-nous configurer plusieurs gravités, sur un View
personnalisé
C'est le 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"
/>
Comme vous le voyez, la gravité par défaut est center_vertical | left, donc mon code Java devrait ressembler à ceci)
View clock = mStatusBarView.findViewById(R.id.clock);
if (clock != null) {
SOMEHOW SET GRAVITY -> mCenterClock ? Gravity.CENTER : (Gravity.CENTER_VERTICAL | Gravity.LEFT);
}
la méthode setGravity ne fonctionne pas sur View
. Existe-t-il donc une alternative pour régler la gravité sans perdre la largeur et la hauteur par défaut?.
Merci d'avance.
Étant donné que com.Android.systemui.statusbar.policy.Clock étend TextView, il suffit de le convertir en TextView et de définir la gravité.
TextView clock = (TextView) mStatusBarView.findViewById(R.id.clock);
clock.setGravity(mCenterClock ? Gravity.CENTER : (Gravity.CENTER_VERTICAL | Gravity.LEFT));
Réf: Code source
As-tu essayé?
clock.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL);
Éditer:
Comme vous ne pouvez pas utiliser setGravity
pour un View
simple, faites quelque chose comme ceci,
Vous pouvez utiliser un RelativeLayout
et définir une règle comme celle-ci ...
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
params.addRule(RelativeLayout.CENTER_HORIZONTAL|RelativeLayout.CENTER_IN_PARENT, clock.getId());
com.Android.systemui.statusbar.policy.Clock clock = (com.Android.systemui.statusbar.policy.Clock)mStatusBarView.findViewById(R.id.clock);
clock.setGravity(Gravity.CENTER_VERTICAL);
essayez le code ci-dessus et supprimez View clock = mStatusBarView.findViewById (R.id.clock);