动态修改布局和添加控件

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
            }
        };
    }

最后的效果,界面丑不要介意啊。


猜你喜欢

转载自blog.csdn.net/u011394071/article/details/53511530
今日推荐