Android(线性布局,约束布局,帧布局,表格布局)

Android

线性布局

  • 简介:LinearLayout 布局,中文线性布局,其主要特征是主要以水平火垂直方式来显示页面中的控件,水平:从左到右,垂直:从上到下,线性布局中,每行或者每列仅允许有一个子视图或者控件。
  • 主要属性
    android:gravity:设置内部控件的显示位置。(比如center是居中)
    android:orientation:设置内部空间的排列方向,常量horizontal(默认值)表示水平排列,vertical表示垂直排列。
    android:layout_weight:设置内部控件在LinearLayout中所占的权重。当控件使用这个属性的时候建议将对应的宽或者高改成0dp(水平布局改宽,垂直布局改高),当每一个控件设置了权重后,在页面中就是按照权重比例占据位置了
  • 举例
    代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="Button" />

    <Button
        android:id="@+id/button4"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:text="Button" />

    <Button
        android:id="@+id/button5"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:text="Button" />

</LinearLayout>

效果如下
在这里插入图片描述

约束布局

  • 简介:ConstraintLayout中文约束布局,其相对其他布局来说,有着更加自由的布局方式,不需要多层嵌套便可以实现比较复杂的布局,而且性能方面更占优势(我怎么感觉这玩意无敌了)
  • 标签
<androidx.constraintlayout.widget.ConstraintLayout
</androidx.constraintlayout.widget.ConstraintLayout>
  • 拖拽添加约束
    直接托进去俩个button会报错,因为其横纵都没约束。
    在这里插入图片描述
    在工具栏这里我们可以看到一个魔法棒是自动添加约束,魔法棒左边是删除所有约束
    在这里插入图片描述
    不过自动添加这种事情,当然弊端很多还不够“智能”,所以我们选择手动
    如下图图中上下左右四个点,直接托起来拖到其他控件的对应点上,就是相对控件的相对位置,拖到边界,就是相对边界的位置。(这不香的厉害)
    在这里插入图片描述
    我这边简单拖了俩个后,可以看到右边的属性检视部分出现了对应的约束属性
    在这里插入图片描述
  • 辅助工具的使用
    工具栏里的这个小玩意就是添加约束辅助的()
    在这里插入图片描述
    具体怎么用,真的就一句话:有手就行,所以我也不多说什么了,自己摸一下就行,太人性化了实在。(小提示,点击界面旁边的小三角可以改变辅助线的类型,但有些情况可能会改变不了,比如我
    所以我就去摸了下它生成的xml文件,一个百分比约束的辅助线大概如下
<androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.5" />

Group和Barrier暂时不是很需要,我就没多摸,也不细说了(回头用到再更)

帧布局

  • 简介:帧布局是一种层叠式布局,把俩个控件叠在一起,然后控制其的显示状态来达成显示效果。

  • 属性
    android:layout_gravity:控制控件的位置
    值得注意的是这个属性是相对父控件来说的,也就是说一个按钮相对其父物体来说的位置
    相应的还有一个属性android:gravity:属性是相对控件本身来说的,比如一个按钮中的文字相对按钮本身的位置

      top:位于布局顶端
      bottom:位于布局底部
      left:位于布局左侧
      right:位于布局右侧
      center:位于布局最中间
      center_vertical:位于垂直方向上的中间位置,单独使用时等价于"bottom|center_vertical"
      center_horizontal:位于水品方向上的中间位置,单独使用时等价于"top|center_horizontal"
    

android:visibility:
View.VISIALBE 可见,显示到页面
View.INVISIABLE 不可见,但是还是占用本有的位置
View.GONE 隐藏,不可见且不占位置

  • 举例
    这边举个例子,说下怎么用这个帧布局
    写一个帧布局,为其添加俩个图片叠在一起(这里我放了一个金星星,一个银星星),然后放了一个按钮,改变了一下位置,打开Mian的java脚本,删除里面院有的东西,添加进按钮和图片的变量,使用id寻找到布局中的那些控件,然后给button添加一个监听,让其检测到点击后根据点积次数来决定显示谁。
    XML代码如下
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="150dp"
        android:layout_height="132dp"
        app:srcCompat="@android:drawable/btn_star_big_on" />

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="150dp"
        android:layout_height="132dp"
        app:srcCompat="@android:drawable/btn_star_big_off" />

    <Button
        android:id="@+id/button6"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />
</FrameLayout>

java代码如下

package com.example.helloandroid;

import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.view.View;

import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private Button button;
    private ImageView imageView1,imageView2;
    private int count = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ll3);

        //找组件
        button = (Button)findViewById(R.id.button6);
        imageView1 = (ImageView)findViewById(R.id.imageView4);
        imageView2 = (ImageView)findViewById(R.id.imageView3);

        button.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  if (count % 2 == 0) {
                      imageView1.setVisibility(View.VISIBLE);
                      imageView2.setVisibility(View.INVISIBLE);
                  } else {
                      imageView2.setVisibility(View.VISIBLE);
                      imageView1.setVisibility(View.INVISIBLE);
                  }
                  count++;
              }
          }
        );
    }
}

表格布局

  • 简介:TableLayout中文表格布局,像他的名字一样,这种布局整体就像是一个表格,每一行都是由一个TableRow对象来组成,而列数取决于所有TableRow对象中所拥有控件最多的那个控件数。
  • 一些属性
对某一列来说
android:stretchColumns:设置该列被拉伸
android:shrinkColumns:设置该列被收缩
android:collapseColumns:设置该列被隐藏

对某个单元来说
android:layout_column:设置该单元显示位置(显示在哪列)
android:layout_span:设置该单元格占据几列,默认为1列

对于TableRow来说
andorid:gravity:设置该行控件内容的显示方式(比如居中,相关关键词参照帧布局那边)
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值