02 Activity窗口对象上的布局

原创 2017年09月19日 01:35:19

Activity窗口对象可以通过调用 setContentView()设置要显示的控件,但只能设置一个View对象。如窗口上有多个按钮等多个控件时,则需要使用布局对象来管理控件的显示位置及对齐方式.

布局控件等的类有: ConstraintLayout, GridLayout, FrameLayout, LinearLayout, RelativeLayout, TableLayout等.

可创建一个布局类对象用于管理多个控件。如实现用LinearLayout对象来管理两个按钮控件, 按水平排列:
工程沿用上一个例子:

/* MyActivity.java */
mport android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;


public class MyActivity extends Activity {
    private Button btn, btn2;
    private LinearLayout layout;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); //调用父类的功能

        layout = new LinearLayout(this); //创建布局类对象
        layout.setOrientation(LinearLayout.HORIZONTAL); //设置水平布局

        btn = new Button(this); //创建按钮对象
        btn.setText("btn1"); //设置按钮显示的文本

        btn2 = new Button(this);
        btn2.setText("btn2");

        layout.addView(btn); //让布局管理器管理按钮
        layout.addView(btn2);
        setContentView(layout);

    }
}

效果图:
这里写图片描述


布局管理器还可以通过setLayoutParams()来设置布局管理器对窗口的布局范围。
其中布局的宽度和高度的选择可以是MATCH_PARENT和WRAP_CONTENT.
MATCH_PARENT是表示占完用上一级窗口或布局管理器的空间.
WRAP_CONTENT是表示根据要显示的内容调整实际的占用空间.

如一个LinearLayout对象管理整个窗口的空间,则可以:

        layout = new LinearLayout(this); //创建布局类对象
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);

        layout.setLayoutParams(params);
        setContentView(layout);

再如用LinearLayout对象水平布局两个按钮对象, 则每个按钮对象都需要setLayoutParams()来设置布局参数. 实现一个按钮布局管理器的30%宽度, 一个按钮占70%宽度, 两个按钮的高度与布局管理器的高度一致

/* MyActivity.java */
package com.example.jk.a01hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;


public class MyActivity extends Activity {
    private Button btn, btn2;
    private LinearLayout layout;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); //调用父类的功能

        layout = new LinearLayout(this); //创建布局类对象
        layout.setOrientation(LinearLayout.HORIZONTAL); //设置水平布局
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                      LinearLayout.LayoutParams.MATCH_PARENT);

        layout.setLayoutParams(params);

        btn = new Button(this);
        btn.setText("btn1");

        btn2 = new Button(this);
        btn2.setText("btn2");

        btn.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 30));
        btn2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 70));

        layout.addView(btn); //让布局管理器管理按钮
        layout.addView(btn2);
        setContentView(layout);

    }
}

效果图:
这里写图片描述


而且布局管理器还可以嵌套使用。如在窗口上实现4个按钮分成每两个按钮一行, 其中第一行占窗口的30%高度,剩下的高度由第二行占用. 而且第一行的两个按钮,一个占40%宽度,另一个占用60%宽度。第二行的两个按钮占用的宽度都是50%.

每一行的两个按钮对象由一个水平的LinearLayout对象来管理, 共需要两个水平的LinearLayout布局管理器,最后由一个垂直的LinearLayout对象来管理这两个水平的布局管理器.

/* MyActivity.java */
package com.example.jk.a01hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;


public class MyActivity extends Activity {
    private Button btn1, btn2, btn3, btn4;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); //调用父类的功能

        LinearLayout hlayout1, hlayout2, vlayout;

        hlayout1 = new LinearLayout(this);
        hlayout1.setOrientation(LinearLayout.HORIZONTAL);
        hlayout2 = new LinearLayout(this);
        hlayout2.setOrientation(LinearLayout.HORIZONTAL);

        vlayout = new LinearLayout(this);
        vlayout.setOrientation(LinearLayout.VERTICAL);

         btn1 = new Button(this);
         btn1.setText("btn1");
         btn2 = new Button(this);
         btn2.setText("btn2");
         btn3 = new Button(this);
         btn3.setText("btn3");
         btn4 = new Button(this);
         btn4.setText("btn4");

         hlayout1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT, 30));
         hlayout2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT, 70));
         vlayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));

         btn1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 40));
         btn2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 60));
         hlayout1.addView(btn1);
         hlayout1.addView(btn2);

         btn3.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 50));
         btn4.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 50));
         hlayout2.addView(btn3);
         hlayout2.addView(btn4);

         vlayout.addView(hlayout1);
         vlayout.addView(hlayout2);

         setContentView(vlayout);
    }
}

效果图:
这里写图片描述
 

版权声明:本文为博主原创文章,未经博主允许转载。

相关文章推荐

Android应用程序窗口(Activity)的测量(Measure)、布局(Layout)和绘制(Draw)过程分析

在前面一篇文章中,我们分析了Android应用程序窗口的绘图表面的创建过程。Android应用程序窗口的绘图表面在创建完成之后,我们就可以从上到下地绘制它里面的各个视图了,即各个UI元素了。不过在绘制...

如何把定制的UI布局放到Activity主窗口的标题中

本例演示如何把一个自定义的UI布局放到的Activity主窗口的布局中,并替换默认的标题。 1. 定义清单文件(AndroidManifest.xml) xml version="1.0" e...

深入理解JVM02--深入理解对象的创建、内存布局、访问定位

对象的创建   Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:克隆、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(本...

第2章3节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之NoteEditor简介(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需...

Android应用程序窗口(Activity)的视图对象(View)的创建过程分析

从前文可知道,每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口。每一个应用程序窗口内部又包含有一个View对象,用来描述应用程序窗口的视图。应用程序窗口视图是真正用来...

第2章2节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之NotesList简介(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需...

Android应用程序窗口(Activity)的视图对象(View)的创建过程分析

从前文可知道,每一个Activity组件都有一个关联的Window对象,用来描述一个应用程序窗口。每一个应用程序窗口内部又包含有一个View对象,用来描述应用程序窗口的视图。应用程序窗口视图是真正用来...

第2章4节《MonkeyRunner源码剖析》了解你的测试对象: NotePad窗口Activity之菜单简介(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需...

Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析

在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程。由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)