以下内容纯粹为本人学习笔记【记录】之用,所听课程(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);
}
}