LayoutParams是View用來告訴它的父控件如何放置本身的,LayoutParams是ViewGroup類裏的一個靜態內部類。php
ViewGroup.LayoutParams僅僅描述了這個View想要的寬度和高度。能夠理解成LayoutParams是子View告訴父View自身寬高的橋樑。html
可取的值:java
不一樣ViewGroup的繼承類對應着不一樣的ViewGroup.LayoutParams的子類,例如:ViewGroup.MarginLayoutParams, WindowManager.LayoutParams等。android
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>
複製代碼