版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011394071/article/details/53511530
动态修改布局和添加控件
需求:
- 代码中动态修改布局参数,使得布局中的控件位置改变
- 在布局中动态添加控件
实现步骤
布局
-
主界面的布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="skxy.dev.demo.MainActivity"> <Button android:id="@+id/btn1" android:layout_width="match_parent" android:text="将button2设置为剧中" android:layout_height="wrap_content"/> <Button android:id="@+id/btn2" android:layout_below="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是button2"/> </RelativeLayout>
-
要添加的控件的布局,这里就一个imageView
<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:src="@mipmap/ic_launcher" android:layout_height="wrap_content"> </ImageView>
逻辑实现
package skxy.dev.demo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
public Button mButton;
public RelativeLayout.LayoutParams mLayoutParams;
public RelativeLayout mRelativeLayout;
public ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到布局相关控件
mRelativeLayout = (RelativeLayout) findViewById(R.id.container);
mImageView = (ImageView) View.inflate(this, R.layout.ivlayout, null);
mButton = (Button) findViewById(R.id.btn2);
//点击btn1添加图片到布局中
mButton.setOnClickListener(mOnClickListener);
//触摸设置Button2的位置
findViewById(R.id.btn1).setOnTouchListener(mTouchListener);
}
/**
* 响应btn1的点击事件
*/
View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewGroup parent = (ViewGroup) mImageView.getParent();
if (parent != null) {
parent.removeView(mImageView);
}
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
//设置属性
params.addRule(RelativeLayout.BELOW, R.id.btn2);
//设置图片的布局参数
mImageView.setLayoutParams(params);
mRelativeLayout.addView(mImageView);
}
};
/**
* 响应btn2的触摸事件
*/
View.OnTouchListener mTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//设置btn1的位置参数
mLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
mLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
//修改在布局中的位置:剧中显示
mButton.setLayoutParams(mLayoutParams);
}
return true;
}
};
}
最后的效果,界面丑不要介意啊。