Things about Android layoutparams

Original text: http://tryenough.com/android-...

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>

Tags: Android xml encoding

Posted on Mon, 02 Dec 2019 21:16:42 -0500 by fiorefrank