android用java动态增添删除修改布局

作者:许佳佳233 时间:2021-07-04 12:48:38 

XML对开发者来说十分的方便,不仅使用起来简单,而且能够及时调试,修改界面之后马上能看到效果。
Java设置布局不具有这个优势。但是java却可以动态对布局进行操作,这是xml所做不到的。笔者认为,新手索要掌握的java动态设置布局主要有两点,一方面是对布局的属性进行修改,另一方面是增添和删除控件。

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

  android用java动态增添删除修改布局

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

接下来看一下分享的demo效果:

android用java动态增添删除修改布局

代码其实比较容易理解,具体的解释已经注释在代码中了,读者可以自己写了理解一下。
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"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:id="@+id/main_layout"
  >

<Button
   android:id="@+id/button1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="隐藏"/>
 <Button
   android:id="@+id/button2"
   android:layout_below="@+id/button1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="显示"/>
 <Button
   android:id="@+id/button3"
   android:layout_below="@+id/button2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="添加布局"/>
 <Button
   android:id="@+id/button4"
   android:layout_below="@+id/button3"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="删除布局"/>
 <RadioGroup
   android:id="@+id/radio_group"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:padding="5dp"
   android:layout_marginLeft="10px"
   android:layout_marginBottom="10px"
   android:orientation="horizontal"
   android:layout_above="@+id/info_tip"
   android:background="@android:color/darker_gray"
   >

<TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="精确度:"/>

<RadioButton
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:checked="true"
     android:text="普通"
     android:textColor="@android:color/black" />

<RadioButton
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="精准"
     android:textColor="@android:color/black" />
 </RadioGroup>

<RelativeLayout
   android:id="@+id/info_tip"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:paddingLeft="10dp"
   android:paddingRight="10dp"
   android:paddingTop="20dp"
   android:background="@android:color/darker_gray"
   >

<TextView
     android:id="@+id/info_tip_name"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="受灾地点"
     android:textColor="@android:color/black"
     android:textSize="20dp"/>
   <TextView
     android:id="@+id/info_tip_distance"
     android:layout_below="@+id/info_tip_name"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="受灾距离"/>
   <TextView
     android:id="@+id/info_tip_address"
     android:layout_toRightOf="@+id/info_tip_distance"
     android:layout_below="@+id/info_tip_name"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_marginLeft="10dp"
     android:text="受灾地址"/>

<Button
     android:layout_alignParentRight="true"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:text="详情"/>

<LinearLayout
     android:layout_below="@+id/info_tip_address"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginTop="10dp"
     android:orientation="horizontal">
     <Button
       android:layout_width="0dp"
       android:layout_weight="1"
       android:layout_height="wrap_content"
       android:text="驾车"/>
     <Button
       android:layout_width="0dp"
       android:layout_weight="1"
       android:layout_height="wrap_content"
       android:text="公交"/>
     <Button
       android:layout_width="0dp"
       android:layout_weight="1"
       android:layout_height="wrap_content"
       android:text="步行"/>
   </LinearLayout>

</RelativeLayout>
</RelativeLayout>

test_linear_layout:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="200dp"
 android:layout_height="200dp"
 android:background="@android:color/holo_blue_bright"
 android:id="@+id/test_layout"
 android:orientation="horizontal"
 >

</LinearLayout>
标签:android,java动态,布局
0
投稿

猜你喜欢

  • 图解JVM垃圾内存回收算法

    2023-10-13 17:24:35
  • IntelliJ IDEA优化配置的实现

    2023-01-01 03:29:55
  • SpringBoot的异常处理流程是什么样的?

    2021-07-09 17:54:40
  • Android studio编写简单的手电筒APP

    2023-11-29 18:43:01
  • 深入理解ThreadLocal工作原理及使用示例

    2022-02-27 19:24:14
  • C#微信公众平台开发之access_token的获取存储与更新

    2023-12-16 06:12:04
  • Java实时获取基金收益项目源码分享

    2023-11-28 17:30:47
  • DataGridView带图标的单元格实现代码

    2021-08-07 16:50:04
  • C#实现windows form拷贝内容到剪贴板的方法

    2022-06-01 12:22:15
  • Unity实现滑动更换界面效果

    2021-10-06 19:56:40
  • java基础入门之IO流

    2022-08-17 00:09:20
  • Java中IO流文件读取、写入和复制的实例

    2023-08-12 03:23:29
  • springboot如何统一设置时区

    2022-01-26 18:16:39
  • Java的RxJava库操作符的用法及实例讲解

    2021-12-14 22:31:41
  • android中RecyclerView自定义分割线实现

    2023-08-03 17:37:47
  • SpringBoot工程打包与运行的实现详解

    2023-11-10 23:51:28
  • SpringBoot参数校验Validator框架详解

    2023-09-22 07:08:40
  • Android客户端实现图片轮播控件

    2023-08-12 17:01:57
  • SpringBoot如何自动生成API文档详解

    2023-05-24 13:44:37
  • 学习Java的9张思维导图

    2021-06-10 03:38:18
  • asp之家 软件编程 m.aspxhome.com