web-dev-qa-db-fra.com

Définir la gravité d'une vue par programme

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.

22
user809486

É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

38
HandlerExploit

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());
8
Arif Nadeem
 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);

2
Shankar Agarwal