web-dev-qa-db-ja.com

プログラムでビューの重力を設定する

私はView over Android Source Code。に取り組んでいます。カスタム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なので、my Javaコードは次のようになります

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

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

setGravityメソッドはViewでは機能しません。デフォルトで幅と高さを失うことなく重力を設定する代替手段はありますか?.

前もって感謝します。

22
user809486

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

参照: ソースコード

38
HandlerExploit

やってみました?

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());
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);

上記のコードを試して、view clock = mStatusBarView.findViewById(R.id.clock);を削除します。

2
Shankar Agarwal