android用java动态增添删除修改布局
程序员文章站
2024-02-28 17:48:10
xml对开发者来说十分的方便,不仅使用起来简单,而且能够及时调试,修改界面之后马上能看到效果。
java设置布局不具有这个优势。但是java却可以动态对布局进行操作,这是...
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"?> <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>
以上就是本文的全部内容,希望对大家的学习有所帮助。