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