博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
游戏得有活动的场景:代码中生成多行多列的LinearLayout布局
阅读量:4337 次
发布时间:2019-06-07

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

既然是江湖,总得有一些可以到处跑的地儿。

咱是新手,那就排的简单点,排个几行几列的就完事了。至于到底排个几行几列的,这个倒也说不准。

得,那就不能直接在layout/xml里面直接画了。咋办?也好办,在activity里面通过代码生成布局就可以了。

activity_scene_fight.xml 如下:

在activity中添加了一个子布局linearlayout:layout_scene和一个textview。layout_scene中将用于展示接下来由代码生成的各种场景的控件。

首先,得能生成单独一行的场景:

/**  * @param clomuns 单行显示的场景数  * @return 返回单行显示的LinearLayout  */private LinearLayout rowsLayout(int clomuns){    LinearLayout rl= new LinearLayout(this);    //设置LayoutParams    LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);    //设置为水平布局    rl.setOrientation(LinearLayout.HORIZONTAL);    rl.setLayoutParams(lp);    //循环添加场景button    for (int j = 0; j < clomuns; j++) {        Button b_scene = new Button(this);        //设置场景按钮的名称        b_scene.setText("场景"+j);        //绑定点击事件        b_scene.setOnClickListener(clickListener);        //添加到创建的线性布局中        rl.addView(b_scene);    }    //添加到显示的父线性布局中    return rl;}/**  * 点击事件  */private OnClickListener clickListener = new OnClickListener() {    @Override    public void onClick(View v) {        t_fight_log.append("你来到了"+((TextView)v).getText()+"\n");    }};

 下一步,生成多行的场景控件,代码如下:

/**     * @param sceneNums活动场景数量     * @return 返回自定义的场景布局     */    private LinearLayout sceneLayout(int sceneNums,int colnum ){        LinearLayout sly=new LinearLayout(this);        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(                LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);        //设置为垂直布局        sly.setOrientation(LinearLayout.VERTICAL);        sly.setLayoutParams(lp);        int rows=sceneNums/colnum;        int surplus=sceneNums%colnum;        if (surplus==0) {            //如果能够被整除            for (int i = 0; i < rows; i++) {                sly.addView(rowsLayout(colnum));            }        }else{            //如果不能够被整除            int i;            for ( i=0 ; i < rows; i++) {                sly.addView(rowsLayout(colnum));            }            //创建最后剩下的,不足一行的布局            sly.addView(rowsLayout(surplus));        }        return  sly;    }

 FightSceneActivity.java代码如下:

protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_scene_fight);    //获取场景列表,生成页面各元素    fightSceneLayout=(LinearLayout)this.findViewById(R.id.layout_scene);    fightSceneLayout.addView(sceneLayout(11,4));    t_fight_log=(TextView) findViewById(R.id.t_fight_log);}

最终效果如下:

 

转载于:https://www.cnblogs.com/zzqm-gamelife/p/10254466.html

你可能感兴趣的文章
MongoDB Limit与Skip方法-7
查看>>
【旧文章搬运】Windows内核常见数据结构(基本类型)
查看>>
ssl初一组周六模拟赛【2018.4.14】
查看>>
Jenkins插件HTML Publisher Plugin的使用
查看>>
A. The number of positions
查看>>
Windows中cmd的DOS命令查看占用某端口的程序及PID号
查看>>
设计多列布局
查看>>
返回一个整数数组中最大子数组的和
查看>>
解决FLASH遮住层的问题 IE,Firefox都适用!
查看>>
让Apache Shiro保护你的应用
查看>>
Hadoop安装-Spark Windows 环境 pycharm开发环境搭建
查看>>
jQuery 在IE下对表单中input type="file"的属性值清除
查看>>
第14周学习进度
查看>>
RecommenderFilterSalaryResult
查看>>
JAVA多线程
查看>>
C#设计模式——访问者模式(Visitor Pattern)
查看>>
echart图表控件配置入门(二)常用图表数据动态绑定
查看>>
[搜索] 洛谷 P1131 时态同步
查看>>
python 最小公倍数
查看>>
BZOJ 1059: [ZJOI2007]矩阵游戏( 匈牙利 )
查看>>