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

Share:
48,490
user809486
Author by

user809486

Updated on August 30, 2020

Comments

  • user809486
    user809486 over 3 years

    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.