博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android -- 动态添加布局
阅读量:6402 次
发布时间:2019-06-23

本文共 2357 字,大约阅读时间需要 7 分钟。

在做项目的时候,遇到了scrollView与listView结合的使用,导致了滑动的混乱,但是有一个办法可以解决掉这个问题,就是手写listView的高度,还有另外一种方法,传送门:《》。

但是在项目中,我们的scrollview中嵌套这两个ListView,这就更麻烦了,为了不去用两个上述方法,我们将另外一个ListView改写为动态加载布局的方法来实现,在布局等操作上感觉还是跟listview差不多,但是没有Adapter。

子布局                                                                                        

显示布局                                                                                     

代码实现                                                                                     

public class MainActivity extends Activity {    private LinearLayout lay;    private LinearLayout item;    private ImageView img;    private TextView txt;    private Button btn_add;    private int[] pic = { R.drawable.ic_launcher, R.drawable.maps,            R.drawable.appstore, R.drawable.calculator, R.drawable.camera };    private String[] str_pic = { "ic_launcher", "maps", "appstore",            "calculator", "camera" };    private String[] str = { "1", "2", "3", "4", "5" };    private int time = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lay = (LinearLayout) findViewById(R.id.lay);        btn_add = (Button) findViewById(R.id.btn_add);        btn_add.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                try {                    inflateAndFind();                } catch (Exception e) {                    // TODO 自动生成的 catch 块                    e.printStackTrace();                }            }        });    }    private void inflateAndFind() throws Exception {        item = (LinearLayout) View.inflate(getBaseContext(), R.layout.item,                null);        img = (ImageView) item.findViewById(R.id.img);        txt = (TextView) item.findViewById(R.id.txt);                if (time < 5) {            Class
cls = R.drawable.class; int value = cls.getDeclaredField(str_pic[time]).getInt(null); // img.setImageResource(pic[time]); img.setImageResource(value); txt.setText(str[time]); lay.addView(item); } else time = 0; time++; }}

代码解析                                                                                    

其实运用的方法就是通过inflate方法将新添加的布局一个个添加上去,inflate在Android里面叫打气筒哈,就是将布局一个个打上去。

后面还有个Class<com.yydcdut.layout.R.drawable>,这个是通过名字去获取ID的int值,应该就是Java的反射机制吧~

我是天王盖地虎的分割线                                                               

源代码:

layout.zip

本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3813793.html,如需转载请自行联系原作者

你可能感兴趣的文章
《机器学习实战》知识点笔记目录
查看>>
完美解决NC502手工sql的查询引擎排序及合计问题
查看>>
windows 7/mac编译cocos2d-x-3.2*的android工程报错
查看>>
MYSQL导入导出.sql文件(转)
查看>>
git review报错一例
查看>>
《信息安全系统设计基础》 课程教学
查看>>
Linux平台下使用rman进行oracle数据库迁移
查看>>
全栈工程师学习Linux技术的忠告
查看>>
iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变...
查看>>
SVN服务器使用(二)
查看>>
反射获取内部类以及调用内部类方法
查看>>
C语言 - pthread
查看>>
App里面如何正确显示用户头像
查看>>
DATAGUARD维护:从库宕机后如何恢复到管理恢复模式
查看>>
U-BOOT之一:BootLoader 的概念与功能
查看>>
我的路上
查看>>
Velocity处理多余空白和多余空白行问题
查看>>
java值传递
查看>>
DB2与oracle有什么区别
查看>>
创建一个多级文件目录
查看>>