Sunday 11 August 2019

android - How to set both gravity and layout gravity of a LinearLayout programatically



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:




Answer



Short answer




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


Background



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.



enter image description here



Here is the xml:



    android:layout_width="match_parent"
android:layout_height="match_parent" >


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" >


android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="50dp"
android:background="#bcf5b1"
android:text="TextView 1" />

android:id="@+id/textView1"
android:layout_width="100dp"
android:layout_height="50dp"

android:background="#aacaff"
android:text="TextView 2" />






Changing things programmatically




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:



enter image description here



See also




No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...