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);
    }
}

效果图:
这里写图片描述
 

版权声明:本文为博主原创文章,未经博主允许转载。 https://blog.csdn.net/jklinux/article/details/78025572

Android四大组件教程——Activity

剔除繁杂的理论,注重实践,深入浅出且系统地讲解Android的相关知识
  • 2017年02月25日 21:42

Android中得到布局文件对象三种方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+] Android中得到布局文件对象有三种方式   第一种,通过Activity对象 Vi...
  • asdf717
  • asdf717
  • 2016-09-20 09:50:35
  • 2918

实现activity变暗的效果

有什么便捷的方式实现activity变暗的效果 不要新开启Activity的方式 也不要使用Dialog 让背景跟Dialog出现一样,变暗,带动画。 private void dimBackgrou...
  • brian512
  • brian512
  • 2016-03-22 17:34:31
  • 625

android 获取当前activity的最顶层及添加布局

最近在做项目时由于自己是新手,会遇到各种问题,下面是我遇到的获取当前 activity的最顶层并设置布局位于中间位置的代码。 1、获取当前最顶层      FrameLayout  view = ...
  • blog_yue
  • blog_yue
  • 2015-09-09 23:00:28
  • 4057

Android源码解析(十八)-->Activity布局绘制流程

这篇文章是承接上一篇文章来写的,大家都知道Activity在Android体系中扮演者一个界面展示的角色,通过上一篇文章的分析,我们知道Activity是通过Window来控制界面的展示的,一个Win...
  • qq_23547831
  • qq_23547831
  • 2016-05-01 00:28:13
  • 16642

Activity layout布局

  • 2011年08月29日 10:26
  • 22KB
  • 下载

Android Activity应用窗口的创建过程分析

【转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树】前言所谓的窗口(Window)就是一个显示在手机屏幕上可视化视图的一片区域。在Android...
  • feidu804677682
  • feidu804677682
  • 2015-10-17 18:47:05
  • 6273

Java 习题9 参考答案及解析

1.问答题(1)JFrame类的对象的默认布局是什么布局? (2)一个容器对象是否可以使用add方法添加一个JFrame窗口? (3)JTextField可以触发什么事件? (4)JTextAr...
  • Rainary
  • Rainary
  • 2017-06-16 14:40:19
  • 2704

activity布局中加载fragment

1.首先  创建fragment的类   package com.qianfeng.fragmentdemo; import android.app.Fragment; import...
  • shanxuyang
  • shanxuyang
  • 2015-07-27 23:10:07
  • 1480

如何在Fragment中获取FragmentActivity中的布局????

我是想在Fragment中往FragmentActivity里面的布局里添加控件,现在我怎么在Fragment中得到这个布局呢??...
  • langbing4689
  • langbing4689
  • 2017-01-01 10:25:02
  • 314
收藏助手
不良信息举报
您举报文章:02 Activity窗口对象上的布局
举报原因:
原因补充:

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