[学习笔记]Android基本布局

来源:互联网 发布:战网更新网络错误 编辑:程序博客网 时间:2024/05/17 01:40

以下内容纯粹为本人学习笔记【记录】之用,所听课程(Q群群友百度网盘提供)为极客学院一位老师所讲(老师大名我尚未知晓),如有侵权请告知。在此特别感谢这位老师录制的视频资料。

1、FrameLayout
frame n.框架、边框、眼镜框、组织
v.设计、表达、陷害
a.有框架的
layout n.布局、安排、设计
FrameLayout 译为“框架布局”
这里写图片描述
其中勾选的“Launch Activity”意为 此Activity作为启动Activity。
之后,AndroidManifest.xml中MainActivity所属的activity标签里的Intent-filter标签得注释或删除。
接着,activity_frame_layout_aty.xml布局改为FrameLayout。
FrameLayout有什么优点?相对于RelativeLayout更轻量级;对于不需要调整子元素位置的情况,更方便。
实例:呈现两张图片(先呈现一张图片),
两张图片进行切换
1)准备好两张图片,放在res/drawable目录下;
2)activity_frame_layout_aty.xml添加两个ImageView用于呈现图片,且第二个ImageView设为invisible(因为开始只显示第一张图片);
3)FrameLayoutAty.java

package com.keen.learnframelayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.FrameLayout;import android.widget.ImageView;public class FrameLayoutAty extends AppCompatActivity {    private FrameLayout activity_frame_layout_aty;//声明    private ImageView ivA, ivB;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_frame_layout_aty);        activity_frame_layout_aty = (FrameLayout) findViewById(R.id.activity_frame_layout_aty);//获取        ivA = (ImageView) findViewById(R.id.ivA);        ivB = (ImageView) findViewById(R.id.ivB);        showA();        //设置事件监听器        activity_frame_layout_aty.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {//呈现图片                if(ivA.getVisibility() == View.VISIBLE) {                    showB();                } else {                    showA();                }            }        });    }    //写两个方法用于呈现图片    private void showA() {        ivA.setVisibility(View.VISIBLE);//可见        ivB.setVisibility(View.INVISIBLE);//不可见    }    private void showB() {        ivA.setVisibility(View.INVISIBLE);//可见        ivB.setVisibility(View.VISIBLE);//不可见    }}

这里写图片描述

2、LinearLayout
线性布局,子元素(对象)一字排开(水平方向(默认)或垂直方向)。有一个很重要的[属性]“比重”–weight,意为分割父级容器的比例。
实例:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.keen.learnlinearlayout.MainActivity">    <TextView        android:layout_weight="1"        android:background="#f00"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:layout_weight="1"        android:background="#0f0"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:layout_weight="1"        android:background="#00f"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

这里写图片描述
某一对象不分割父级容器,把另一个对象铺满剩余容器。
第2个是根据自己的内容宽度来设定的(不参与父级容器的分割),剩下的父级容器宽度全部由第1个铺开(参与父级容器的分割)。实例

    <TextView        android:layout_weight="1"        android:background="#f00"        android:text="Hello from king"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />    <TextView        android:background="#0f0"        android:text="Nice"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />

这里写图片描述
这种方式对于开发非常有用。实例:一个浏览器页面
这里写图片描述

3、RelativeLayout
相对布局,是相对于父级容器(如边界、中心点)进行定位,奇特的地方是还可以相对于其他控件进行定位。
这里写图片描述

package com.keen.relativelayoutaty;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.RelativeLayout;import android.widget.TextView;public class RelativeLayoutAty extends AppCompatActivity {    private RelativeLayout root;    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        root = new RelativeLayout(this);        setContentView(root);        tv = new TextView(this);        tv.setText("陈大哥");        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);        //调整位置        lp.leftMargin = 200;//左边距        lp.topMargin = 500;//上边距        root.addView(tv, lp);    }}

这里写图片描述

4、用代码控制子对象的添加和删除
动态添加、删除布局元素。完全不依赖布局文件

package com.keen.learnlinearlayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private LinearLayout root;    private Button btnClickme;//声明    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);//        setContentView(R.layout.browser);//相当于绑定此布局文件        root = new LinearLayout(this);//创建一个布局        root.setOrientation(LinearLayout.VERTICAL);//设置布局方向        setContentView(root);        for (int i =0; i<5; i++) {            btnClickme = new Button(this);//创建按钮//          btnClickme.setText("Click me");            btnClickme.setText("Remove me");            btnClickme.setOnClickListener(this);            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);            lp.weight = 1;//设置比重            root.addView(btnClickme, lp);//            root.addView(btnClickme, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);        }//        btnClickme = new Button(this);//创建按钮//        btnClickme.setText("Click me");//        root.addView(btnClickme);//默认//        root.addView(btnClickme, 500, 300);//直接指定宽度、高度//        root.addView(btnClickme, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);        //根据布局参数添加子对象//        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);//        root.addView(btnClickme, lp);    }    @Override    public void onClick(View v) {        root.removeView(v);    }}

这里写图片描述