[学习笔记]Android基本布局

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

1、FrameLayout
frame n.框架、边框、眼镜框、组织
v.设计、表达、陷害
a.有框架的
layout n.布局、安排、设计
FrameLayout 译为“框架布局”
[学习笔记]Android基本布局_第1张图片
其中勾选的“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);//不可见
    }
}

[学习笔记]Android基本布局_第2张图片

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


<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>

[学习笔记]Android基本布局_第3张图片
某一对象不分割父级容器,把另一个对象铺满剩余容器。
第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" />

[学习笔记]Android基本布局_第4张图片
这种方式对于开发非常有用。实例:一个浏览器页面
[学习笔记]Android基本布局_第5张图片

3、RelativeLayout
相对布局,是相对于父级容器(如边界、中心点)进行定位,奇特的地方是还可以相对于其他控件进行定位。
[学习笔记]Android基本布局_第6张图片

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

[学习笔记]Android基本布局_第7张图片

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

[学习笔记]Android基本布局_第8张图片

你可能感兴趣的:(Android用户界面优化)