文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android studio APP开发 控制UI布局的方式,用代码书写UI界面,代码和XML混合控制UI布局

2022-06-06 13:13

关注

控制UI布局的方式

UI界面就是APP的界面,Android提供4种方法控制UI界面,这里主要讲两种。

代码控制UI界面

直接在Activity中用代码设置UI界面的组件以及组件的点击事件。

步骤一: 首先注意,如果要完全用代码手写一个UI界面,需将Activity中的下面这行代码删掉,不删会有影响。

setContentView(R.layout.activity_main);

也就是说Activity不能和现有的布局文件进行绑定。

步骤二: 在onCreate()方法中,创建一个帧布局管理器,并为该布局管理器设置背景。

//创建一个帧布局管理器,并为该布局管理器设置背景关键代码
        FrameLayout frameLayout = new FrameLayout(this);   // 创建帧布局管理器
        frameLayout.setBackgroundResource(R.drawable.ic_launcher_background);  //设置背景
        setContentView(frameLayout);    //设置在Activity中显示frameLayout

到此就创建了一个布局文件,不会在文件目录中显示这个布局,因为不是以xml文件格式存储,此时运行程序,打开的就是一个只有背景图片的界面。

步骤三: 创建一个TextView组件,设置其文字大小和颜色,并将其添加到布局管理器中。

TextView textView = new TextView(this);
        textView.setText("用代码控制UI界面");   // 设置显示的数字
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,24);   //设置文本字大小,单位为sp
        textView.setTextColor(Color.rgb(1,1,1));  // 设置文字的颜色
        frameLayout.addView(textView);   // 将textView 添加到布局管理器中

这就相当于在XML文件中添加了一个TextView控件。可以设置很多属性,需要时可以自己去学习。

步骤四:再创建一个TextView控件,并为这个控件设置点击事件。

        TextView text2 = new TextView(this);
        text2.setText("单击进入游戏...");
        text2.setTextSize(TypedValue.COMPLEX_UNIT_SP,24);
        text2.setTextColor(Color.rgb(1,1,1));
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT); //创建布局参数对象
        params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL;  //设置居中显示
        text2.setLayoutParams(params); //设置布局参数
        //为text2组件添加单击事件监听器,并将该组建添加到布局管理器中,具体代码如下:
        text2.setOnClickListener(new View.OnClickListener() {  //为text2设置点击事件
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(MainActivity.this).setTitle("系统提示")  //设置对话框的
                        .setMessage("游戏有风险,进入需谨慎,真的要进入吗?") //设置对话框显示的内容
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() { //为确定按钮设置点击事件
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Log.i("3.2","进入游戏"); //输出日志信息。
                                //可以在这里设置其他的点击事件,比如页面跳转
                            }
                        }).setNegativeButton("退出", new DialogInterface.OnClickListener() { //为退出按钮设置点击事件
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i("3.2","退出游戏");  //输出消息日志
                        finish(); //结束游戏退出程序。 就是让当前Activity出栈
                    }
                }).show();
            }
        });
        frameLayout.addView(text2);  //将text2添加到布局管理器中,就是添加到UI布局中,没有此代码添加的text2控件不生效

设置点击事件的代码很关键,这里 是一个弹框为例,实际可以设置很多不同的点击事件。
并且建议将text2设置为全局变量,就要在onCreate之前声明这个组件。

public TextView text2;

这只是用代码控制UI布局的开始,仅仅是冰山一角。实际上可以通过代码做很多的事情,比如设计一个自己需要的组件,独一无二的组件。我在之后的学习中如果遇到会尽量讲到这些。 接下来是整体代码:

public class MainActivity extends AppCompatActivity {
    public TextView text2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //创建一个帧布局管理器,并为该布局管理器设置背景关键代码
        FrameLayout frameLayout = new FrameLayout(this);   // 创建帧布局管理器
        frameLayout.setBackgroundResource(R.drawable.ic_launcher_background);  //设置背景
        setContentView(frameLayout);    //设置在Activity中显示frameLayout
        TextView textView = new TextView(this);
        textView.setText("用代码控制UI界面");   // 设置显示的数字
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,24);   //设置文本字大小,单位为sp
        textView.setTextColor(Color.rgb(1,1,1));  // 设置文字的颜色
        frameLayout.addView(textView);   // 将textView 添加到布局管理器中
        text2 = new TextView(this);
        text2.setText("单击进入游戏...");
        text2.setTextSize(TypedValue.COMPLEX_UNIT_SP,24);
        text2.setTextColor(Color.rgb(1,1,1));
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT); //创建布局参数对象
        params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL;  //设置居中显示
        text2.setLayoutParams(params); //设置布局参数
        //为text2组件添加单击事件监听器,并将该组建添加到布局管理器中,具体代码如下:
        text2.setOnClickListener(new View.OnClickListener() {  //为text2设置点击事件
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(MainActivity.this).setTitle("系统提示")  //设置对话框的
                        .setMessage("游戏有风险,进入需谨慎,真的要进入吗?") //设置对话框显示的内容
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() { //为确定按钮设置点击事件
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Log.i("3.2","进入游戏"); //输出日志信息。
                                //可以在这里设置其他的点击事件,比如页面跳转
                            }
                        }).setNegativeButton("退出", new DialogInterface.OnClickListener() { //为退出按钮设置点击事件
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i("3.2","退出游戏");  //输出消息日志
                        finish(); //结束游戏退出程序。 就是让当前Activity出栈
                    }
                }).show();
            }
        });
        frameLayout.addView(text2);  //将text2添加到布局管理器中,就是添加到UI布局中,没有此代码添加的text2控件不生效
    }
}

运行效果

代码和XML混合控制UI布局。

这是我们必须熟练掌握的方法。
直接看代码:

public class SecondActivity extends AppCompatActivity  {
    private ImageView[] img = new ImageView[4];
    private ImageView imag;
    private int[] imagePath = new int[]{
            R.drawable.image_1,R.drawable.image_2
    };
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        LinearLayout linearLayout = (LinearLayout) findViewById(R.id.layout);
        for(int i=0;i<imagePath.length;i++){
            img[i] = new ImageView(this);
            img[i].setImageResource(R.drawable.image_1);
            img[i].setPadding(5,5,5,5);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(120,70);
            img[i].setLayoutParams(params);
            linearLayout.addView(img[i]);
        }
        imag = new ImageView(this);
        imag.setImageResource(R.drawable.image_1);
        imag.setPadding(5,5,5,5);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(120,70);
        imag.setLayoutParams(params);
        linearLayout.addView(imag);
    }
}

作者:Ace_bb


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯