Android-LayoutParams的那些事

原文:http://tryenough.com/android-layoutparams

LayoutParams是什么?

LayoutParams是View用来告诉它的父控件如何放置本身的,LayoutParams是ViewGroup类里的一个静态内部类。php

ViewGroup.LayoutParams仅仅描述了这个View想要的宽度和高度。能够理解成LayoutParams是子View告诉父View自身宽高的桥梁。html

可取的值:java

  • fill_parent 强制性使子视图的大小扩展至与父视图大小相等(不含 padding )
  • match_parent 与fill_parent相同,用于Android 2.3 & 以后版本
  • wrap_content 自适应大小,强制性地使视图扩展以便显示其所有内容(含 padding )

不一样ViewGroup的继承类对应着不一样的ViewGroup.LayoutParams的子类,例如:ViewGroup.MarginLayoutParams, WindowManager.LayoutParams等。android

原文:http://tryenough.com/android-layoutparams

实际使用的一个例子

Activity:ide

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 不可抽取为成员变量
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(vg_lp);
                params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, R.id.mIv);
                mIv.setLayoutParams(params); //使layout更新
            }
        });

        findViewById(R.id.mTvMoveLeft).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 左 (默认处于顶部,因此看起来是左上)
                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) {
                // 居中
                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) {
                // 左部垂直居中
                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) {
                // 右下
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(mVgLp);
                params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
                mIv.setLayoutParams(params);
            }
        });
        // 绿在蓝右边
        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);
            }
        });

        // 绿在蓝下边
        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);
            }
        });
    }
}
复制代码

布局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="黑色最左!!"/>
        <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="黑色最右!!"/>
        <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="黑色居中"/>
    </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="黑色靠左垂直居中"/>
        <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="黑色右下角"/>
    </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="绿在蓝右边"/>
        <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="绿在蓝下边"/>
    </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="蓝" android:gravity="center" android:background="#660000ff" />
        <TextView android:id="@+id/mTvGreen" android:layout_width="20dp" android:layout_height="20dp" android:text="绿" android:gravity="center" android:background="#6600ff00" android:layout_below="@id/mTvBlue" />
    </RelativeLayout>
</LinearLayout>
复制代码
相关文章
相关标签/搜索