圆咕噜咕噜 发表于 2024-8-19 17:08:48

Android常见的界面结构

https://i-blog.csdnimg.cn/direct/7f0562389e6341fabefef0dbae983896.gif

目录

​前言
1.线性结构LinearLayout
2.相对结构RelativeLayout
3.表格结构TableLayout
 4.网格结构GridLayout
实现一个盘算器界面
改Button按钮颜色
5.帧结构FrameLayout
前言

在Android应用步伐中,界面是由结构和控件构成的。控件是功能单元,负责接受用户的输入或者展示信息。而结构就是框架,来组织和定位这些控件的位置。
我们先来简朴了解一下Android中一些常见的结构
1.线性结构LinearLayout

线性结构内的子控件通常被指定为程度或者竖直排列。
https://i-blog.csdnimg.cn/direct/29ea1e2eb7034e6a9a80262283904dac.png
常用属性
属性名称说明android:orintation 设置结构内控件的排列顺序
(vertical为竖直,horiztal为程度)
android:layout_weight在结构内设置控件的权重,属性值可以直接写int值android:layout_width设置结构或控件的宽度android:layout_height设置结构或控件的高度android:background设置结构或者控件的配景android:gravity线性结构中,子容器相对于父容器地点的位置

[*]当layout_width为0时,layout_weight表现程度方向的宽度比例。
[*]当layout_height为0时,layout_weight表现竖直方向的高度比例。
竖直摆放:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
      android:id="@+id/btn1"
      android:text="按钮1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>

    <Button
      android:id="@+id/btn2"
      android:text="按钮1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>

    <Button
      android:id="@+id/btn3"
      android:text="按钮1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
</LinearLayout> https://i-blog.csdnimg.cn/direct/deb942b60f6c4679846434a243342df5.png 
我们将父容器的orintation改为horiatal就是程度结构
https://i-blog.csdnimg.cn/direct/aad6479662604678a52645a424d4e701.png
2.相对结构RelativeLayout

相对结构通过相对定位的方式来指定子控件的位置。
https://i-blog.csdnimg.cn/direct/ce73215da2d449cbbf8d719b4ee6850a.png
RelativeLayout以父容器或者其他子控件为参照物,来指定结构内子控件的位置。
在相对结构中,其子控件具备一些属性,用于指定子控件的位置,一般是多个一起使用,
相对结构中子控件的属性:
https://i-blog.csdnimg.cn/direct/d9119dc086724dc9afea364319c6085e.png
 根据父容器定位
https://i-blog.csdnimg.cn/direct/91e135cdf01f4d82ac2abb71c2242e3e.png
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="40sp">

    <Button
      android:id="@+id/btn1"
      android:text="左上角"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"/>


    <Button
      android:id="@+id/btn2"
      android:text="上居中"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"/>


    <Button
      android:id="@+id/btn3"
      android:text="右上角"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"/>


    <Button
      android:id="@+id/btn4"
      android:text="左居中"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerVertical="true"/>


    <Button
      android:id="@+id/btn5"
      android:text="居中"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerInParent="true"/>



    <Button
      android:id="@+id/btn6"
      android:text="右居中"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_centerVertical="true"/>



    <Button
      android:id="@+id/btn7"
      android:text="左下角"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentBottom="true"/>



    <Button
      android:id="@+id/btn8"
      android:text="下居中"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      android:layout_alignParentBottom="true"/>


    <Button
      android:id="@+id/btn9"
      android:text="按钮9"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentBottom="true"
      android:layout_alignParentRight="true"/>
</RelativeLayout> https://i-blog.csdnimg.cn/direct/725027b31520493f9d0346388ede290e.png 
根据子控件来定位https://i-blog.csdnimg.cn/direct/079636ed7dfb4b1ea9fdcb52194cca35.png
 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
      android:id="@+id/target_btn"
      android:text="都以我为中心"
      android:textSize="10sp"
      android:textColor="@color/black"
      android:layout_centerInParent="true"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>

    <Button
      android:id="@+id/btn_1"
      android:text="我在中心下面"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="10sp"
      android:textColor="@color/black"
       android:layout_below="@+id/target_btn"
      android:layout_marginTop="40dp"
      android:layout_alignLeft="@+id/target_btn"/>

    <Button
      android:id="@+id/btn_2"
      android:text="我在中心上面"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="10sp"
      android:textColor="@color/black"
      android:layout_above="@+id/target_btn"
      android:layout_marginBottom="40dp"
      android:layout_alignLeft="@+id/target_btn"/>

    <Button
      android:id="@+id/btn_3"
      android:text="我在中心左面"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="10sp"
      android:textColor="@color/black"
      android:layout_alignBottom="@+id/target_btn"
       />
   
    <Button
      android:id="@+id/btn_4"
      android:text="我在中心右面"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="10sp"
      android:textColor="@color/black"
      android:layout_alignTop="@+id/target_btn"
      android:layout_toRightOf="@+id/target_btn"
      android:layout_marginLeft="40dp"/>
</Relative https://i-blog.csdnimg.cn/direct/e23256d8cd5a476e9a7c9e72f7185607.png 
3.表格结构TableLayout

表格结构采用列、行的情势来管理控件,不需要明确声明此中有多少行和多少列,而是在通过在表格中添加TableRow结构或者控件来控制表格的行数,在TableRow结构中添加控件来控制表格的列数。
这种结构和后序讲的GridLayout的区别就是能够订定各列宽度不一样的表格,而网格结构只能订定列宽度一样的结构。
由于TableLayout继承于线性结构LinearLayout结构,以是表格结构支持线性结构的属性,此外,还有其他常用的属性:
属性名称说明android:stretchColumns设置可拉伸的列。如:android:stretchColumns=“0”,表现第1列可以拉伸android:shrinkColumns设置可收缩的列。如:android:shrinkColumns=“1,2”,表现第2、3列可以收缩android:collapseColumns设置可以隐藏的列。如:android:collapseColumns=“0”,表现第1列可以隐藏 此外,表格结构中控件的常用属性:
属性名称说明android:layout_column设置该控件表现的位置,如:android:layout_column="1",表如今第2个位置表现android:layout_span设置该控件占据第几列,默以为第1列 示例:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
   
    <TableRow>
      <Button
            android:text="按钮1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"/>
      
      <Button
            android:text="按钮2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"/>
    </TableRow>
   
    <TableRow>
      <Button
            android:text="按钮3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"/>

      <Button
            android:text="按钮4"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_column="1"/>
    </TableRow>
   
    <TableRow>
      <Button
            android:text="按钮5"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_column="2"/>
    </TableRow>
</TableLayout> https://i-blog.csdnimg.cn/direct/7aa9f438e4254ebea6e2011791385828.png
 
 4.网格结构GridLayout

网格结构是android14.0引入的,使用它可以减少结构嵌套。
https://i-blog.csdnimg.cn/direct/841cc42e6781438db2e1baf768221ea2.png
常见属性:
属性说明android:columnCount设置最大列数android:rowCount设置最大行数android:orientationGridLayout中子元素的结构方向android:alignmentModealignBounds:对齐子视图边界 alignMargins :对齐子视距内容,默认值android:columnOrderPreserved使列边界表现的顺序和列索引的顺序雷同,默认是trueandroid:rowOrderPreserved使行边界表现的顺序和行索引的顺序雷同,默认是trueandroid:useDefaultMargins没有指定视图的结构参数时使用默认的边距,默认值是false https://i-blog.csdnimg.cn/direct/05fe337a8e0b44faa2fd2322b8e4d2df.png
https://i-blog.csdnimg.cn/direct/0c8f07a5664a42979ea66e957d1d09d8.png 使用layout_columnSpan 、layout_rowSpan时要加上layout_gravity属性,否则没有用果;另外item在边沿时宽高盘算会出现错误,需要我们手动设置宽高,否则达不到想要的效果。
GridLayout在API21时引入了android:layout_columnWeight和android:layout_rowWeight来办理中分问题。
实现一个盘算器界面


<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:columnCount="4"
    android:rowCount="9"
    android:orientation="horizontal">

    <TextView
      android:text="计算器"
      android:textSize="15sp"
      android:layout_columnSpan="4"
      android:layout_gravity="center"/>
    <TextView
      android:id="@+id/result"
      android:layout_gravity="fill"
      android:gravity="end"
      android:layout_columnSpan="4"
      android:text="0"
      android:background="#D5D4CF"
      android:textSize="50dp"/>

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="%" />
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"

      android:text="CE" />

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="C"/>

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="delete"/>

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="1/x" />
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="x^2" />

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="x^(1/2)"/>

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="÷"/>
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="7" />
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"

      android:text="8" />

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="9"/>

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="X"/>
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="4" />
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"

      android:text="5" />

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="6"/>

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="-"/>
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="1" />
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"

      android:text="2" />

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="3"/>

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="+"/>
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="+/-" />
    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"

      android:text="0" />

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="."/>

    <Button
      android:layout_gravity="fill"
      android:layout_columnWeight="1"
      android:text="="/>

</GridLayout> https://i-blog.csdnimg.cn/direct/5e0874ed7fc14589855668f15fadf2e4.png 
改Button按钮颜色

不过我们实际的盘算器是没有那么显着的绿色的,那怎么改呢?
我们可以找到AndroidManifest.xml,在里找到以下主题。
https://i-blog.csdnimg.cn/direct/7704789d97d64a48b017d125a1b56940.png
Ctrl+鼠标左键进入themes.xml文件,将改写为:
Theme.MaterialComponents.DayNight.NoActionBar.Bridge https://i-blog.csdnimg.cn/direct/d1207fda4e1a455fa0c7cbace67522f4.png 
当我们返回我们的XML文件就会看到
https://i-blog.csdnimg.cn/direct/6e2b168aa43048b3a84d19f4ccb373ed.png
5.帧结构FrameLayout

帧结构用于在屏幕上创建一块空缺的区域,添加到该区域中的每个子控件占一帧,这些帧会一个一个叠加在一起,后加入的控件会叠加在上一个控件上层。默认环境下,帧结构中的所有控件会与结构的左上角对齐。
2个特殊属性:
属性相关方法说明android:foregroundsetForeground(Drawable)设置该帧结构容器的前景图像android:foregroundGravitysetForeground(int)界说绘制前景图像的gravity属性 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:layout_gravity="center"
    android:background="#FF33ffff" />
<TextView
    android:layout_width="240dp"
    android:layout_height="240dp"
    android:layout_gravity="center"
    android:background="#FF33ccff" />
<TextView
    android:layout_width="180dp"
    android:layout_height="180dp"
    android:layout_gravity="center"
    android:background="#FF3399ff" />
<TextView
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:layout_gravity="center"
    android:background="#FF3366ff" />
<TextView
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center"
    android:background="#FF3300ff" />
</FrameLayout> https://i-blog.csdnimg.cn/direct/a3f8edbb5f00423ba6ea28a6f7cb2457.png
总体来讲,FrameLayout由于定位的欠缺,导致它的应用场景也比力少,不过之后使用碎片的时间是可以使用到的。
以上就是在android中几个常见的界面结构。
就先到这里了~
下期预报:android的一些常见的控件。 
https://i-blog.csdnimg.cn/direct/1a5fa8546f094609a75148e3dc6212fe.gif

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android常见的界面结构