Set gravity of a View Programmatically
48,490
Solution 1
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
Solution 2
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());
Solution 3
com.android.systemui.statusbar.policy.Clock clock = (com.android.systemui.statusbar.policy.Clock)mStatusBarView.findViewById(R.id.clock);
clock.setGravity(Gravity.CENTER_VERTICAL);
try the above code and remove View clock = mStatusBarView.findViewById(R.id.clock);
Author by
user809486
Updated on August 30, 2020Comments
-
user809486 over 3 years
Im working on a
View
over Android Source Code. I was wondering how can we setup multiple gravities, to a customView
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.