第3章:布局与容器

Posted 亿钱君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第3章:布局与容器相关的知识,希望对你有一定的参考价值。

1. 尺寸单位

  • dp
  • sp

2. 线性布局:LinearLayout

特点:所包含的组件会一个一个排列

  • vertical:垂直排列
  • horizontal:水平排列

android:layout_weight属性的使用

  • 水平布局中:指定组件在水平方向的比例
  • 垂直布局中:指定组件在垂直方向占有的比例

设计布局时,可以嵌套使用(例如:创建一个用户登录页面

  • 在一个垂直布局中又添加两个水平布局
  • 其分别放置一个TextView和一个EditText组件
  • 最后是一个Button组件

3. 相对布局:RelativeLayout

特点:组件的位置会相对其他组件进行组织(例如:参照组件的容器(上级组件)或同级组件)

  • android:layout_marginTop:设置组件顶部与基准组件的距离,如果没有指定相对组件,则使用距离容器顶部的尺寸
  • android:layout_marginLeft:设置组件左侧与基准组件的距离,如果没有指定相对组件,则使用距离容器左侧的尺寸
  • android:layout_toRightOf:将当前组件放在指定组件的右侧
  • android:layout_alignTop:指定当前组件与指定组件顶部对齐
  • android:layout_below/above:设置当前组件位于指定组件的下方、上方

注:更多属性请使用时查询

在这里插入图片描述

4. 容器:ScrollView和HorizontalScrollView

前面已经使用过容器,如;RadioGroup中可以包含多个RadioButton组件

  • ScrollView:界面中的组件比较多时,屏幕不能完整显示,此时可以将这些组件放在一个ScrollView组件中,这样就可以上下滑动屏幕来处理完整界面了
  • ScrollView在滑动时会显示一个垂直的滚动条,如果界面是水平的,则可以使用orizontalScrollView,这样滑动时就会显示一个水平滚动条

5. 搜索功能:SearchView和ListView组件的配合使用

通过SearchView和ListView组件的配合使用,可以很方便的创建自己的搜索界面

MainActivity类实现SearchView.OnQueryTextListener接口包括两个方法

  • onQueryTextSubmit()方法:此方法会在单击搜索按钮时执行,方法返回false时自动关闭虚拟键盘
  • onQueryTextChange()方法:搜索内容改变时响应,本案例暂不做处理

本例中

  • result数组保存搜索结果
  • data数组定义完整数组
  • adapter对象用于匹配ListView组件的数据
  • 在onQueryTextSubmit()方法中,将搜索内容与data数据组中的每一项进行对比,当成员包含搜索内容时,将添加到result对象中

onCreate()方法中,使用了SearchView组件的三个方法

  • setSubmitButtonEnabled(true):是否在搜索栏后显示提交(搜索)按钮,默认不显示
  • setIconifiedByDefault(false):设置输入搜索内容的文本框是否在单击搜索图标(放大镜)后才显示,默认为true
  • setOnQueryTextListener(this):设置响应搜索操作的对象

在这里插入图片描述

package com.syl.searchviewdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {

    //组件
    private SearchView searchView;
    private ListView lstResult;

    //全部数据
    private String[] data = {"Tom","Jerry","Jhon","Tim","Maria","Marry","Alice","张三","李四","张六"};

    //搜索结果
    private List<String> result = new ArrayList<String>();

    //数据匹配
    private ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        searchView = (SearchView)findViewById(R.id.searchView);
        searchView.setSubmitButtonEnabled(true);
        searchView.setIconifiedByDefault(false);
        searchView.setOnQueryTextListener(this);

        lstResult =(ListView)findViewById(R.id.lstResult);
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,result);
        lstResult.setAdapter(adapter);


    }

    //单击搜索按钮后
    @Override
    public boolean onQueryTextSubmit(String query){
        result.clear();
        for(String s:data){
            if(s.toLowerCase().indexOf(query.toLowerCase())>=0)result.add(s);
        }
        adapter.notifyDataSetChanged();
        return false;
    }
    //搜索内容改变时,暂不处理
    @Override
    public boolean onQueryTextChange(String newText){
        return false;
    }
}

在这里插入图片描述

6. 自定义布局

6.1 创建布局

6.2 创建组件类

6.3 使用9-Patch图片

以上是关于第3章:布局与容器的主要内容,如果未能解决你的问题,请参考以下文章

FAB 的片段布局与 CoordinatorLayout 冲突

如何使用滚动片段容器实现通用布局?

跟着腾讯T4学架构:微服务+MySQL+Nginx+Redis+容器化+虚拟机

【西瓜书】第3章 线型模型

第2章构建布局良好的Windows

第9章 顺序容器