What is LayoutParams?
LayoutParams is used by View to tell its parent control how to place itself. LayoutParams is a static internal class in the ViewGroup class.
ViewGroup.LayoutParams only describes the width and height the View wants. It can be understood that LayoutParams is the bridge that the child View tells the parent View its width and height.
Desirable values:
- fill_parent
Force child view size to be equal to parent view size (excluding padding)
- match_parent
Same as fill_parent for Android 2.3 & later
- wrap_content
Adaptive size, forcing the view to expand to show all its contents (including padding)
Inheritance classes of different viewgroups correspond to different subclasses of ViewGroup.LayoutParams, such as ViewGroup.MarginLayoutParams, WindowManager.LayoutParams, etc.
Original text: http://tryenough.com/android-...An example of practical use
Activity:
public class MoveActivity extends AppCompatActivity { private ImageView mIv; private TextView mTvBlue; private TextView mTvGreen; private ViewGroup.LayoutParams mVgLp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_move); mIv = (ImageView) findViewById(R.id.mIv); mTvBlue = (TextView) findViewById(R.id.mTvBlue); mTvGreen = (TextView) findViewById(R.id.mTvGreen); mVgLp = mIv.getLayoutParams(); findViewById(R.id.mTvMoveRight).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ViewGroup.LayoutParams vg_lp = mIv.getLayoutParams(); // RelativeLayout.LayoutParams cannot be extracted as a member variable RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(vg_lp); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, R.id.mIv); mIv.setLayoutParams(params); //Update layout } }); findViewById(R.id.mTvMoveLeft).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Left (the default is at the top, so it looks like the top left) RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(mVgLp); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); mIv.setLayoutParams(params); } }); findViewById(R.id.mTvCenter).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Centered RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(mVgLp); params.addRule(RelativeLayout.CENTER_IN_PARENT); mIv.setLayoutParams(params); } }); findViewById(R.id.mTvLeftVer).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Center left vertically RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(mVgLp); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT|RelativeLayout.CENTER_VERTICAL); mIv.setLayoutParams(params); } }); findViewById(R.id.mTvRightBot).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // lower right RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(mVgLp); params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); mIv.setLayoutParams(params); } }); // Green to the right of blue findViewById(R.id.mTvaGRightB).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ViewGroup.LayoutParams vgLp = mTvGreen.getLayoutParams(); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(vgLp); params.addRule(RelativeLayout.RIGHT_OF,R.id.mTvBlue); mTvGreen.setLayoutParams(params); } }); // Green under blue findViewById(R.id.mTvGElowB).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ViewGroup.LayoutParams vgLp = mTvGreen.getLayoutParams(); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(vgLp); params.addRule(RelativeLayout.BELOW,R.id.mTvBlue); mTvGreen.setLayoutParams(params); } }); } }
Layout xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/activity_main" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.amqr.movetest.MoveActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/mTvMoveLeft" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#6600ff00" android:padding="10dp" android:layout_margin="10dp" android:text="Black leftmost!!"/> <TextView android:id="@+id/mTvMoveRight" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:background="#6600ff00" android:layout_margin="10dp" android:text="Black rightmost!!"/> <TextView android:id="@+id/mTvCenter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#6600ff00" android:padding="10dp" android:layout_margin="10dp" android:text="Black centered"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/mTvLeftVer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:background="#6600ff00" android:layout_margin="10dp" android:text="Black left vertical center"/> <TextView android:id="@+id/mTvRightBot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#6600ff00" android:padding="10dp" android:layout_margin="10dp" android:text="Black bottom right corner"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/mTvaGRightB" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:background="#6600ff00" android:layout_margin="10dp" android:text="Green to the right of blue"/> <TextView android:id="@+id/mTvGElowB" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#6600ff00" android:padding="10dp" android:layout_margin="10dp" android:text="Green under blue"/> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="200px" android:background="#66ff0000" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="RelativeLayout" android:layout_centerInParent="true" /> <ImageView android:id="@+id/mIv" android:layout_width="30dp" android:layout_height="40px" android:background="#000" android:layout_centerHorizontal="true" /> <TextView android:id="@+id/mTvBlue" android:layout_width="20dp" android:layout_height="20dp" android:text="blue" android:gravity="center" android:background="#660000ff" /> <TextView android:id="@+id/mTvGreen" android:layout_width="20dp" android:layout_height="20dp" android:text="green" android:gravity="center" android:background="#6600ff00" android:layout_below="@id/mTvBlue" /> </RelativeLayout> </LinearLayout>