24

我正在研究ViewAndroid 源代码。我想知道我们如何设置多个重力,自定义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。那么有没有一种设置重力而不丢失默认宽度和高度的替代方法?

提前致谢。

4

3 回答 3

40

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

参考:源代码

于 2012-04-27T18:21:10.257 回答
8

你有没有尝试过?

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());
于 2012-04-27T18:05:09.057 回答
2
 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);

于 2012-04-27T18:02:53.930 回答