您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > Android_动态加载布局
由于前段时间项目需要,需要在一个页面上加载根据不同的按钮加载不同的布局页面,当时想到用tabhot。不过美工提供的界面图完全用不上tabhot,所以想到了动态加载的方法来解决这一需求。在这里我整理了一下,写了一个DEMO希望大家以后少走点弯路。首先,我们先把界面的框架图画出来,示意图如下:中间白色部门是一个线性布局文件,我喜欢在画图的时候用不同的颜色将一块布局标示出来,方便查看。布局文件代码如下:?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=:orientation=verticalandroid:layout_width=fill_parentandroid:layout_height=fill_parentLinearLayoutandroid:orientation=horizontalandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentButtonandroid:text=加载ListViewandroid:id=@+id/Button01android:layout_width=wrap_contentandroid:layout_height=wrap_content/ButtonButtonandroid:text=加载另外一个页面android:id=@+id/Button02android:layout_width=wrap_contentandroid:layout_height=wrap_content/Button/LinearLayoutLinearLayoutandroid:id=@+id/LinearLayout01android:background=#FFFFFFandroid:layout_width=fill_parentandroid:layout_height=fill_parent/LinearLayout/LinearLayout从上面的效果图可以看出,那块白色的线性布局是用来动态加载传进来的布局文件。好了,我们就来做如果把布局文件动态的加载进来。下面我们一步一步来实现这个效果,首先,先把需要的XML勾画出来,分为步骤如下。新建一个布局用来存放ListView页面,代码如下:?xmlversion=1.0encoding=UTF-8?LinearLayoutandroid:id=@+id/layoutandroid:layout_width=fill_parentandroid:layout_height=fill_parentxmlns:android=:id=@+id/ListView01android:layout_width=wrap_contentandroid:layout_height=wrap_content/ListView/LinearLayout新建一个ListView每一行数据的样式,代码如下:?xmlversion=1.0encoding=UTF-8?LinearLayoutandroid:id=@+id/LinearLayout01android:layout_width=fill_parentandroid:layout_height=fill_parentxmlns:android=:text=@+id/TextView01android:id=@+id/TextView01android:layout_width=wrap_contentandroid:layout_height=wrap_content/TextView/LinearLayout新建另外一个页面,用来区分此页面是动态加载的,代码如下:?xmlversion=1.0encoding=UTF-8?LinearLayoutandroid:id=@+id/hellolayoutandroid:layout_width=fill_parentandroid:layout_height=fill_parentxmlns:android=:text=HELLOandroid:layout_width=wrap_contentandroid:layout_height=wrap_content/TextView/LinearLayout实现ListView的添充数据,这里不详细介绍如何填充ListView每行数据,有不解的朋友可以回头看我写的文章:点击这里,代码如下:packagecom.terry;importjava.util.ArrayList;importjava.util.HashMap;importandroid.content.Context;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.TextView;publicclasslistAdapterextendsBaseAdapter{ArrayListHashMapString,Objectlist=newArrayListHashMapString,Object();privateLayoutInflaterinflater;publiclistAdapter(Contextcontex){inflater=LayoutInflater.from(contex);HashMapString,Objectmap=newHashMapString,Object();for(inti=0;i10;i++){map.put(name,例子);list.add(map);}}@OverridepublicintgetCount(){//TODOAuto-generatedmethodstubreturnlist.size();}@OverridepublicObjectgetItem(intposition){//TODOAuto-generatedmethodstubreturnlist.get(position);}@OverridepubliclonggetItemId(intposition){//TODOAuto-generatedmethodstubreturnposition;}@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){//TODOAuto-generatedmethodstubfinalviewHoldermyHolder;if(convertView==null){myHolder=newviewHolder();convertView=inflater.inflate(R.layout.list_view_row,null);myHolder.tv=(TextView)convertView.findViewById(R.id.TextView01);convertView.setTag(myHolder);}else{myHolder=(viewHolder)convertView.getTag();}myHolder.tv.setText(list.get(position).get(name).toString());returnconvertView;}}项目大纲如下图:好了,到此我们的准备工作就己经完成,接下来就是要教大家如何实现动态加载上面所画的布局页面了,先看一下效果图:点击第一个按钮点击第二个按钮动态加载代码如下:packagecom.terry;importandroid.app.Activity;importandroid.graphics.Color;importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.LinearLayout;importandroid.widget.ListView;importandroid.widget.TextView;publicclassdynaActivityextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);finalLayoutInflaterinflater=LayoutInflater.from(this);Buttonbtn=(Button)findViewById(R.id.Button01);Buttonbtn2=(Button)findViewById(R.id.Button02);finalLinearLayoutlin=(LinearLayout)findViewById(R.id.LinearLayout01);btn.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubLinearLayoutlayout=(LinearLayout)inflater.inflate(R.layout.listview,null).findViewById(R.id.layout);ListViewlv=(ListView)layout.getChildAt(0);lv.setAdapter(newlistAdapter(dynaActivity.this));lin.removeAllViews();lin.addView(layout);}});btn2.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubLinearLayoutlayout=(LinearLayout)inflater.inflate(R.layout.hello,null).findViewById(R.id.hellolayout);TextViewlv=(TextView)layout.getChildAt(0);lv.setTextColor(Color.RED);lin.removeAllViews();lin.addView(layout);}});}}上面通过使用LayoutInflater每次点击按钮时候去读取布局文件,然后找到布局
本文标题:Android_动态加载布局
链接地址:https://www.777doc.com/doc-2897195 .html