Im working on a View
over Android Source Code. I was wondering how can we setup multiple gravities, to a custom View
This is the 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" />
As you see, default gravity is center_vertical|left, so my Java code should be something like this
View clock = mStatusBarView.findViewById(R.id.clock); if (clock != null) { SOMEHOW SET GRAVITY -> mCenterClock ? Gravity.CENTER : (Gravity.CENTER_VERTICAL | Gravity.LEFT); }
setGravity method don't work on View
. So is there an alternative of setting gravity without losing the width and height by default?.
Thanks in advance.
You can specify the gravity as center_horizontal, center_vertical and center (which centers both horizontally and vertically). On the child views of the LinearLayout you can specify the layout_gravity property, which also supports center_horizontal, center_vertical and center.
Since com.android.systemui.statusbar.policy.Clock extends TextView just cast it to a TextView and set the gravity.
TextView clock = (TextView) mStatusBarView.findViewById(R.id.clock); clock.setGravity(mCenterClock ? Gravity.CENTER : (Gravity.CENTER_VERTICAL | Gravity.LEFT));
Ref: Source code
Have you tried?
clock.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL);
Edit:
Since you cannot use setGravity
for a plain View
, do something like this,
You can use a RelativeLayout
and set a rule like this...
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); params.addRule(RelativeLayout.CENTER_HORIZONTAL|RelativeLayout.CENTER_IN_PARENT, clock.getId());
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With