以编程方式设置视图的重力

2022-09-01 18:32:38

我正在开发一个基于Android的源代码。我想知道我们如何设置多个重力,以定制ViewView

这是 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|左,所以我的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);

编辑:

由于您不能用于 plain ,因此请执行类似操作,setGravityView

您可以使用并设置如下规则...RelativeLayout

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

推荐