Устанавливать гравитацию вида программно

Im работает над View над исходным кодом Android. Мне было интересно, как мы можем настроить множественные гравитации, в пользовательский View

Это 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"
        />

Как вы видите, гравитация по умолчанию - center_vertical | left, поэтому мой Java-код должен быть чем-то вроде этого

    View clock = mStatusBarView.findViewById(R.id.clock);

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

Метод setGravity не работает на View. Итак, есть альтернатива установки силы тяжести, не теряя по умолчанию ширину и высоту?

Спасибо заранее.

Ответы

Ответ 1

Так как com.android.systemui.statusbar.policy.Clock расширяет TextView, просто передайте его в TextView и установите гравитацию.

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

Ссылка: Исходный код

Ответ 2

Вы пробовали?

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

Изменить:

Поскольку вы не можете использовать setGravity для простого View, сделайте что-то вроде этого,

Вы можете использовать RelativeLayout и установить правило, подобное этому...

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

Ответ 3

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

 clock.setGravity(Gravity.CENTER_VERTICAL);

попробуйте приведенный выше код и удалите View clock = mStatusBarView.findViewById(R.id.clock);