XML对开发者来说十分的方便,不仅使用起来简单,而且能够及时调试,修改界面之后马上能看到效果。

Java设置布局不具有这个优势。但是java却可以动态对布局进行操作,这是xml所做不到的。笔者认为,新手索要掌握的java动态设置布局主要有两点,一方面是对布局的属性进行修改,另一方面是增添和删除控件。


首先说一下动态设置布局在项目中的应用,拿高德地图举个例子,如下图:

  


我们可以看到,高德地图的默认界面点击地图之后的界面是不一样的,上面同样的控件在layout中的位置也不一样,这个用xml便是难以实现的了,于是java动态设置布局便有了其重要性。


接下来看一下笔者要分享的demo效果:(源码在文章结尾)



代码其实比较容易理解,具体的解释已经注释在代码中了,读者可以自己写了理解一下。

MainActivity:

package com.example.activeuitest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.LinearLayout;import android.widget.RadioGroup;import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity implements View.OnClickListener{    private Button BT_Gone;//让布局隐藏    private Button BT_Visiable;//让布局显示    private Button BT_Add;//增添布局    private Button BT_Delete;//删除布局    private RelativeLayout RL_main;    private RadioGroup RL_RadioGroup;    private RelativeLayout RL_InfoTip;    private LinearLayout LL_test;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();//初始化    }    private void init() {        BT_Gone= (Button) findViewById(R.id.button1);        BT_Visiable= (Button) findViewById(R.id.button2);        BT_Add= (Button) findViewById(R.id.button3);        BT_Delete= (Button) findViewById(R.id.button4);        RL_main=(RelativeLayout)findViewById(R.id.main_layout);        RL_RadioGroup=(RadioGroup)findViewById(R.id.radio_group);        RL_InfoTip=(RelativeLayout)findViewById(R.id.info_tip);        //此处要获取其他xml的控件需要先引入改layout的view(这个linearlayout用于演示添加和删除)        View view= LayoutInflater.from(this).inflate(R.layout.test_linear_layout,null,false );        LL_test=(LinearLayout)view.findViewById(R.id.test_layout);        BT_Gone.setOnClickListener(this);        BT_Visiable.setOnClickListener(this);        BT_Add.setOnClickListener(this);        BT_Delete.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch(v.getId()){            case R.id.button1:                RL_InfoTip.setVisibility(View.GONE);//底部tip设置不可见                //初始化宽高属性                RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(                        ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);                lp1.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);//设置置底                lp1.setMargins(10, 0, 0, 10);//设置margin,此处单位为px                RL_RadioGroup.setLayoutParams(lp1);//动态改变布局                break;            case R.id.button2:                RL_InfoTip.setVisibility(View.VISIBLE);//底部tip设置可见                //初始化宽高属性                RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(                        ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);                lp2.setMargins(10, 0, 0, 10);//设置margin,此处单位为px                lp2.addRule(RelativeLayout.ABOVE, R.id.info_tip);//设置above,让控件于R.id.info_tip之上                RL_RadioGroup.setLayoutParams(lp2);//动态改变布局                break;            case R.id.button3:                //初始化宽高属性,此处单位为px                RelativeLayout.LayoutParams lp3 = new RelativeLayout.LayoutParams(200, 200);                lp3.addRule(RelativeLayout.BELOW, R.id.button4);//设置below,让控件于R.id.button4之下                RL_main.addView(LL_test, lp3);//动态改变布局                LL_test.setVisibility(View.VISIBLE);//此处需要设置布局显示,否则会不显示                break;            case R.id.button4:                RL_main.removeView(LL_test);//动态改变布局                break;        }    }}


activity_main:

<?xml version="1.0" encoding="utf-8"?>    


test_linear_layout:

<?xml version="1.0" encoding="utf-8"?>


源码地址:http://download.csdn.net/detail/double2hao/9428144



更多相关文章

  1. Android中给按钮同时设置背景和圆角示例代码
  2. Android刘海屏、水滴屏全面屏最佳适配方案
  3. Android(安卓)TextView 去除顶部和底部留白(上下的间距有空白问题
  4. Android(安卓)Google Map API使用的八个步骤
  5. 设置Android沉浸式状态栏颜色以及更改字体颜色 AndroidStatusBar
  6. Android(安卓)和 iOS 孰优孰劣:真实应用开发过程告诉你答案
  7. Android(安卓)APN的设置问题
  8. Android中style和theme巧用:Android应用程序启动时背景画面的切
  9. Android自定义控件系列案例【四】

随机推荐

  1. ListView嵌套ListView时发生:View too lar
  2. android APN的打开与关闭
  3. Android AIDL——实现机制浅析
  4. SurfaceView 的基本使用
  5. Android Studio 功能测评
  6. 自定义View系列教程06--详解View的Touch
  7. Android(安卓)Audio 数据流详解
  8. Android小技术知识(多用于面试)
  9. Android VR Player(全景视频播放器) [8]:Med
  10. Android(安卓)自定义密码输入框和键盘(仿