I am risking writing a duplicate question, but as I was researching the answer to another SO question, I realized that I couldn't find a simple question and answer that included setting both gravity and layout_gravity of a LinearLayout
. Also, I was confused as to the difference between them when talking about a ViewGroup
rather than just a view. I am answering my question below.
Here are some of the other questions I viewed:
Remember that gravity sets the positioning of a view's children, while layout_gravity sets the positioning of a view within its parent. So in your case, you want to set the gravity of the LinearLayout, which can be done via member methods. You should also set the orientation. Show activity on this post.
To create a linear layout in which each child uses the same amount of space on the screen, set the android:layout_height of each view to "0dp" (for a vertical layout) or the android:layout_width of each view to "0dp" (for a horizontal layout). Then set the android:layout_weight of each view to "1" .
The LinearLayout is the most basic layout, and it arranges its elements sequentially, either horizontally or vertically. To arrange controls within a linear layout, the following attributes are used: android:orientation—Used for arranging the controls in the container in horizontal or vertical order.
android:layout_gravity sets the gravity of the View or Layout relative to its parent.
Set gravity
linearLayout.setGravity(Gravity.CENTER);
Set layout gravity
// the LinearLayout's parent is a FrameLayout
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(400, 400);
params.gravity = Gravity.TOP|Gravity.RIGHT;
linearLayout.setLayoutParams(params);
Previously, I have explained the difference between 'gravity' and `layout_gravity' for views within a layout.
Setting the gravity
of a LinearLayout
itself changes the location of the views within it. Setting the layout_gravity of a LinearLayout
changes how the LinearLayout
is arranged within its parent layout.
This image shows a LinearLayout
(brown) within a FrameLayout
(white). The LinearLayout
's gravity
is set to center_horizontal
and its layout_gravity
is set to right|bottom
.
Here is the xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/llExample"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="right|bottom"
android:background="#e3e2ad"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="50dp"
android:background="#bcf5b1"
android:text="TextView 1" />
<TextView
android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="50dp"
android:background="#aacaff"
android:text="TextView 2" />
</LinearLayout>
</FrameLayout>
The following code shows how to change both the gravity
and the layout_gravity
of the LinearLayout
.
public class LinearLayoutGravity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linear_layout_gravity);
// Change the gravity (not layout_gravity) of the LinearLayout
LinearLayout ll = (LinearLayout) findViewById(R.id.llExample);
ll.setGravity(Gravity.CENTER);
// Change the layout_gravity (not gravity) of the LinearLayout
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(400, 400);
params.gravity = Gravity.TOP|Gravity.RIGHT;
ll.setLayoutParams(params);
}
}
And here is the result:
RelativeLayout
and LinearLayout
with gravity: What is the effect?If you are using KOTLIN use or
operator like this:
GRAVITY = Gravity.RIGHT or Gravity.CENTER_VERTICAL
frameContainer.layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
GRAVITY)
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