私は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
では機能しません。デフォルトで幅と高さを失うことなく重力を設定する代替手段はありますか?.
前もって感謝します。
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));
参照: ソースコード
やってみました?
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());
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);を削除します。