24

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。それで、デフォルトで幅と高さを失うことなく重力を設定する代替手段はありますか?

前もって感謝します。

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 に答える