AndroidStudio入门基础(一)——基础布局_萌萌怪的博客-程序员秘密_androidstudio包含布局

技术标签: AndroidStudio  布局  android  基础  课程设计  

写在前面:

上学期学习了Android,从一开始的什么都不懂到后来成功做出一个课程设计作品,回忆起来一路还是充满坎坷和辛酸泪的啊。

遗忘是可怕的,为了防止以后把好不容易学到的东西忘得一干二净,我打算写一系列的AndroidStudio教程记录一些有用的知识点,当然,我会从最基础的地方写起,希望可以帮助到一些初学者~

最后,如果时间和精力允许的情况下,我会一步步的还原我的课程设(≧∀≦)ゞ


目录

1.认识目录

2.RelativeLayout

3.LinearLayout


1.认识目录

以FirstActivity为例子,我们需要掌握的文件有:

  • manifest
  • java
  • drawable
  • layout
  • values

①manifest文件夹里面只有一个AndroidManifest.xml文件,在这个文件里,我们是对整个app进行一些设置,例如app的logo,app一进去的启动页面,app的名字...

②java文件夹里面是.java文件,负责整个app的逻辑处理,是完成整个app的核心所在。java文件真的超级powerful,后续会慢慢用例子体现,现在说一大堆显得有点空洞。

TIPS:初学者一般Java文件建立好了之后,不会随便移动它的位置。

③drawable文件夹里面放app需要用到的图片

④layout文件夹里面放的是“画页面”的.xml文件,里面的文件也叫布局文件。如果你会html&css&js的话,就很好理解了。.xml文件的作用就和.html和.css文件的作用类似,页面需要什么组件?怎么布局?用一些什么样式?都在.xml里面设置。但是对于一些复杂的样式,在.xml文件里面可能设置不了那么精美,就可以在java文件里面设置。

⑤value文件夹里面放了一些字符串,颜色等常量,例如:

//color.xml
<resources>
    <color name="colorPrimary">#3F51B5</color>
</resources>


//firstActivity.xml
<Button
    android:background="@color/colorPrimary"
    />

对于颜色#3F51B5,我给它起名字叫colorPrimary,之后我在布局文件中用这个颜色,就只需要喊它的名字colorPrimary就可以了。

最后总结一些基本思想:

  • layout和java文件夹是最重要的。如果把app比作一个人,layout就是一个人的脸,java就是一个人是灵魂。前者决定了这个app长什么样子,后者决定了这个app可以实现那么功能。
  • 对于初学者,AndroidManifest.xml和value文件夹的作用不用着急掌握,到了某一天你需要实现某个功能需要用到这些,你就可以真真切切的知道它的用处了。

2.RelativeLayout

AndroidStudio里面支持的布局有挺多种的,但是最最重要的是RelativeLayout(相对布局)和LinearLayout(线性布局),熟练掌握这两种布局也非常够用了,当然还有GridLayout...但是对于初学者,先学会了相对布局和线性布局,再去学习其他布局,就会觉得非常简单轻松了。还有一个非常有用的布局,叫RecyclerLayout,因为要结合adapter使用,所以对于初学者略难,这里就先不讲了,之后会非常详细的介绍它。

学习布局需要掌握的东西很简单,就是它有的属性,以及取不同属性值可以达到的效果,下面我就慢慢列出来。

  • layout_width
  • layout_height

这两个属性就决定了布局的宽度和高度,把RelativeLayout想象成一个相框或者一个容器,在这个相框里面可以装其他的组件。对于嵌套在相框里面的组件,其所在的相框就是它的父空间。这个相框的大小呢,就用上面这两个属性举例,取值有三种:

  • wrap_content 刚刚把文字组件包裹满的长度
  • match_parent 撑满整个父空间的长度
  • 100px 具体的像素值

对于相对布局有一个地方要注意!!!

相对布局里面的组件需要设置id(在同一个.xml文件里面的所有组件,其id不可以重复哦~)然后用layout_below设置组件的相对位置。

<?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/button_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 1"
        />

    <Button
        android:id="@+id/button_2"
        android:layout_below="@id/button_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 2"
        />
</RelativeLayout>

例如上面这个例子,在RelativeLayout里面有两个按钮,第一个按钮的id是button_1,android:id="@+id/button_1",第二个按钮的id是button_2,为button_2设置了android:layout_below="@id/button_1"表示按钮2在按钮1的下面。所以效果图如下:

如果我不为按钮2设置相对向下的对象会怎样呢?也就是删掉android:layout_below="@id/button_1"。答案是按钮二会覆盖按钮一。

如果想让按钮居中怎么办?答案就是为RelativeLayout添加一个属性  android:gravity="center"

如果继续追问,我希望按钮一和按钮二并排在一起怎么办?答案是:sorry,RelativeLayout做不到啊~~

但是LinearLayout可以做到哦!

RelativeLayout还有很多其他的属性,可以自己试着玩,重要的属性就是上面这些,我用红色的粗体标记啦~


3.LinearLayout

线性布局要灵活一些,在实际应用上也是最最最广泛的。

  • layout_width
  • layout_height

和相对布局一样的用法和属性值,我就不赘述了!

区别于RelativeLayout,LinearLayout就不要求每个组件都要设置自己的id了,但是最好还是设置一下,这是一个好习惯哦。

那么问题来了,我怎么设置两个组件是横着并排还是竖着并排呢??现在就隆重介绍线性布局的重要属性 orientation          

取值有两种:vertical(垂直)和 horizontal(水平)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    >

    <Button
        android:id="@+id/button_1"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 1"
        />

    <Button
        android:id="@+id/button_2"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 2"
        />

    <Button
        android:id="@+id/button_3"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 3"
        />

</LinearLayout>

android:orientation="horizontal" 决定了容器里面的所有组件都绝对是水平排列的
!!!需要注意的就是,哪怕我的组件已经装不下了,也不会被挤到下一排,而是只显示一截,甚至完全不显示。

<?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/button_1"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 1"
        />

    <Button
        android:id="@+id/button_2"
        android:layout_width="200px"
        android:layout_height="100px"
        android:text="Button 2"
        />

</LinearLayout>

android:orientation="vertical"决定了容器里的组件都是垂直排列,这就很好理解了。

线性布局还有一个重要的属性 layout_weight 取值一般是1、2、3...表示权重的大小,例如:

<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/button_1"
        android:layout_width="200px"
        android:layout_height="100px"
        android:layout_weight="1"
        android:text="Button 1"
        />

    <Button
        android:id="@+id/button_2"
        android:layout_width="200px"
        android:layout_height="100px"
        android:layout_weight="2"
        android:text="Button 2"
        />

</LinearLayout>

LinearLayout的强大就在于它是可以嵌套的,从而实现很多复杂的布局。

为了巩固你对它的认识,我出一个小小的题目,这是我的课程设计的一个页面,你会怎么设计这个布局呢??

我自己也再试了试:

<?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"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:background="#FFEA8E"
    >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#98E0AD">

                <ImageView
                    android:id="@+id/image_bg"
                    android:layout_width="match_parent"
                    android:layout_height="258dp"
                    android:background="#EDD3ED"/>

                <LinearLayout
                    android:layout_below="@id/image_bg"
                    android:id="@+id/layout_button"
                    android:layout_width="match_parent"
                    android:layout_height="70dp"
                    android:background="#F8A1A4"
                    android:orientation="vertical">

                    <RadioGroup
                        android:id="@+id/rg_main"
                        android:layout_width="match_parent"
                        android:layout_height="70dp"
                        android:layout_marginLeft="40dp"
                        android:layout_alignParentBottom="true"
                        android:background="#C785C8"
                        android:orientation="horizontal">

                        <RadioButton
                            android:id="@+id/rb_me"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_weight="1"
                            android:paddingRight="28dp"
                            android:background="#C00000"
                            android:button="@null"
                            android:gravity="center"
                            android:textSize="19sp" />

                        <RadioButton
                            android:id="@+id/rb_heart"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:paddingRight="33dp"
                            android:layout_weight="1"
                            android:button="@null"
                            android:background="#7030A0"
                            android:gravity="center"
                            android:textSize="19sp" />

                        <RadioButton
                            android:id="@+id/rb_order"
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_weight="1"
                            android:background="#00B0F0"
                            android:paddingRight="34dp"
                            android:button="@null"
                            android:gravity="center"
                            android:textSize="19sp" />
                    </RadioGroup>
                </LinearLayout>


                <LinearLayout
                    android:id="@+id/layout_mywork"
                    android:layout_below="@id/layout_button"
                    android:layout_width="match_parent"
                    android:layout_height="74dp"
                    android:background="#6BD089"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="62dp"
                        android:textColor="#212122"
                        android:gravity="center"
                        android:background="#8389E0"
                        android:textSize="24sp"
                        />

                </LinearLayout>

                <LinearLayout
                    android:id="@+id/layout_work1"
                    android:layout_below="@id/layout_mywork"
                    android:layout_width="match_parent"
                    android:orientation="horizontal"
                    android:paddingRight="6dp"
                    android:paddingLeft="6dp"
                    android:background="#C785C8"
                    android:layout_height="150dp">

                    <ImageView
                        android:padding="0dp"
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:layout_height="160dp"
                        android:background="#FBCFD0"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        />

                    <ImageView
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:background="#FBCFD0"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:layout_height="160dp"
                        />

                    <ImageView
                        android:id="@+id/work1"
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:background="#FBCFD0"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:layout_height="160dp"
                        />

                </LinearLayout>

                <LinearLayout
                    android:id="@+id/layout_work2"
                    android:layout_below="@id/layout_work1"
                    android:layout_width="match_parent"
                    android:layout_marginTop="10px"
                    android:orientation="horizontal"
                    android:paddingRight="6dp"
                    android:paddingLeft="6dp"
                    android:background="#60C5F1"
                    android:layout_height="150dp">

                    <ImageView
                        android:padding="0dp"
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:layout_height="160dp"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:background="#C8EFD4"
                        />

                    <ImageView
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:layout_height="160dp"
                        android:background="#C8EFD4"
                       />

                    <ImageView
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:layout_marginRight="6dp"
                        android:layout_marginLeft="6dp"
                        android:layout_height="160dp"
                        android:background="#C8EFD4"
                        />

                </LinearLayout>

            </RelativeLayout>

</LinearLayout>

总结:

这一篇主要讲了布局,都是在layout文件夹的.xml文件中实现,现在还没涉及到java文件。

下一步是介绍一些常用的组件~~  传送门

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42183184/article/details/82528910

智能推荐

UCAS计算机网络实验_cuixuange的博客-程序员秘密

中科院计算机网络实验 交换机 NAT地址转换 应用层的socket通信实现对数据结构mac_port_map的所有操作,以及数据包的转发和广播操作 实现函数:;实现对于内网外网IP_PORT hash表NAT_mapping_entry操作,从而实现数据包转发(更换IP+PORT,重新计算checksum);分布式字符统计 socket通信

vue-awesome-swiper 自定义分页器使用_徐二斤的博客-程序员秘密

首先需要引入swiper组件,可以全局注册,也可以在页面内注册,具体方法见官网我这里只在本页面中进行了注册,代码如下,你可以填充需要的数据&amp;amp;lt;template&amp;amp;gt; &amp;amp;lt;div&amp;amp;gt; &amp;amp;lt;swiper :options=&amp;quot;swiperOption&amp;quot; ref=&amp;quot;mySwiper&amp;quot;&amp;amp;gt; &a

c语言读取png文件大小,求助: C语言- 利用libpng读取png大小,并转换为jpg类型图片..._will lian的博客-程序员秘密

大家好,最近研究C语言图像处理这方面遇到一个难题,详情如下:目标:将png类型图片的信息读入内存,提取所需要的数据并保存,然后转换为如jpg等其它图片格式。1.libpng库已经装好,通过makefile调用库文件路径也正确。2.写了一个读取函数,如下:#include#include#include#include#include#include#include"png.h...

为什么还有这么多人用C++写服务端?_c++能做服务端吗_pixrane的博客-程序员秘密

现代选择有很多:java + javascript, c+python, c+lua, scala, go, erlang。我们面向性能的服务器用 java,面向逻辑服务器 python,面向高并发的会选择 scala,次一级高并发或者性能测试程序(机器人)会选择 gevent。那是不是我们就不用C++呢?我们用 C来做网络,不用C++,但是C的比例在所有代码中占比有限。这是否意味我们可以放弃C/C

按键精灵定位坐标循环_按键精灵的控制命令居然恐怖到了这种程度_weixin_39704066的博客-程序员秘密

控制命令其实就是第三章的控制结构。而在按键精灵中为了方便将这些命令所需要的参数用输入框的形式表现出来,我们只需要填写对应的参数的值,然后插入到脚本中就可以完成一个控制结构的编辑。 图:控制命令面板一、插入颜色选择结构 之前我们学习的颜色选择结构,里面包含的参数在这个界面上都有体现。 如果坐标:这里的X和Y代表横坐标和纵坐标。 颜色匹配:等于(=)代表和右边的颜色相同。不等于(≠)代表和右边的颜色...

python速查手册 模块卷_Python速查手册·基础卷(全彩版)_寒枫不抵你刹那温的博客-程序员秘密

本书通过“语法参考”“快用锦囊”“应用场景”3个主要版块,全面细致地讲解Python中提供的内置函数、基本语句、常用开发技能等内容。全书共16章,包括输入输出、格式化处理、基本语句、字符串操作、列表、元组、字典、集合、数学运算与数字处理、数据类型转换、迭代、序列操作、对象操作、反射操作、编译执行、装饰器等,在附录中介绍了Python中运算符的应用。全书包含245个语法参考、595个快用锦囊和57个...

随便推点

vue垂直滚动文字公告效果_vue公告_汤米粥的博客-程序员秘密

想做一个垂直滚动的公告栏效果,网上找了好久才找到一个靠谱的,有的不滚动,后来才研究清楚几个关键的知识。1. 只要把第一个div向上滚动,后面的兄弟div不需要代码控制,它们会自动上移。2. that.play = false 一定要修改属性,只有修改属性这样才能触发控件重绘,,才会有移动效果

Redis未授权访问漏洞复现的(三种方式)_永不垂头的博客-程序员秘密

Redis未授权访问漏洞复现(三种方式)一、Redis介绍Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。二、漏洞简介及危害漏洞简介Redis因配置不当就会导致未授权访问。在默认情况下,Redis会绑定在 0.0.0.0:6379。如果没有采用相关的策略,比如添加防火墙规则避免其他非信

用Python去PG中执行SQL并取出返回数据_python 返回pg库列数据_云平_Stephen的博客-程序员秘密

文章目录概述安装psycopg模块yum安装或者手动安装模块包用pip安装使用测试连接我常用的连接类概述Python程序提供特定的模块来连接postgresql数据库,是psycopg2模块,使用该模块连接到数据库可以对其进行一些数据库操作,是自动运维pg的很好方式安装psycopg模块有些Python默认没有安装此模块,所以需要安装:yum安装有yum源可直接安装yum insta...

2020-10-20_peach windows安装部署 博客_henweimei的博客-程序员秘密

使用Peach进行模糊测试从入门到放弃2019-12-03阅读7700概述本文对模糊测试技术进行了综述分析,介绍了开源模糊测试框架Peach的结构、原理及pit文件编写方法,旨在帮助对模糊测试感兴趣的小伙伴能快速入门peach,最后以常见的http协议和工控Modbus协议为例进行了实验。文末搜集了本文所用到的工具和相关资料供大家下载。模糊测试概念模糊测试 (fuzz testing, fuzzing)技术是安全测试技术的一种,通过构造畸形输入数据使得软件发生异常如崩溃等情况,从而.

吃死这份333页的Android 性能优化PDF宝典,三大核心内容,我把阿里面试官给怼回去了_Android-until的博客-程序员秘密

事情是这样的,前段时间去阿里面试的时候因为我在简历上写了精通自定义View与UI性能优化(故事的开始),然后就被被面试官怼了,实惨。。。要说性能优化这一块,在大厂面试中是必问的一个模块,比如以下:内存优化,内存抖动和内存泄漏。(东方头条) 什么时候会发生内存泄漏?举几个例子(美团) ANR是什么,怎么解决?(美团) View层次过深怎么优化,选择哪个布局比较好?(美团) 怎样检测函数执行是否卡顿(字节跳动) 如何对Android 应用进行性能分析以及优化? 性能优化如何分析systr

在web项目中使用MarkDown组件_markdown web_布碗的博客-程序员秘密

说 在项目中,要录入图文信息,需要将图片存到服务器。本篇博文将介绍在javaweb项目中,怎样使用MarkDown组件。在项目中使用了servlet,smartupload进行文件的上传。

推荐文章

热门文章

相关标签