【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)

简介: 【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)

使用ViewGroup

在Android APP中,所有用户界面元素都由View和ViewGroup对象组成。视图是用户在屏幕上绘制时可以与之交互的对象。ViewGroup是用于存储其他View(和ViewGroup)对象的布局容器!Android为我们提供了View和ViewGroup子类的集合,其中提供了一些常见的输入控件(如按钮和文本字段)和各种布局模式(如线性或相对布局)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent" 
              android:layout_height="fill_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="I am a Button" />
</LinearLayout>

要定义布局,可以在代码中实例化View对象并开始构建树。然而,定义布局的最简单和最有效的方法是使用XML文件,这更符合人们的阅读习惯。XML与HTML相似,因为它使用XML元素的名称来表示视图。因此,元素将在您的界面中创建一个TextView控件,而将为LinearLayout创建一个容器!例如,具有文本视图和按钮的简单垂直布局

简单效果

要实现第一个布局的1:1效果,只需将两个LinearLayouts的权重分别更改为1和1。其用法可以概括为:按比例划分水平方向:将涉及的View的android:width属性设置为0dp,然后设置androidweight属性以设置比例;类似地,在垂直方向上,只需将android:height设置为0dp,然后设置权重属性!您可以编写自己的垂直等比除法来体验简单的用法!

<View  
    android:layout_width="match_parent"  
    android:layout_height="1px"  
    android:background="#000000" />  

② 权重属性的详细信息:
当然,如果我们不将上述设置方法应用于0dp,我们可以直接使用wrap Content和match _在parent的情况下,需要解析weight属性。有两种情况:wrap Content和match _ parent此外,这取决于LinearLayout的方向是水平还是垂直,这决定了哪个方向是等分的

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"    
    android:id="@+id/LinearLayout1"    
    android:layout_width="match_parent"    
    android:layout_height="match_parent"    
    android:orientation="horizontal">   
        
    <LinearLayout    
        android:layout_width="0dp"    
        android:layout_height="fill_parent"    
        android:background="#ADFF2F"     
        android:layout_weight="1"/>    
       
        
    <LinearLayout    
        android:layout_width="0dp"    
        android:layout_height="fill_parent"    
        android:background="#DA70D6"     
        android:layout_weight="2"/>    
        
</LinearLayout>  

在这里插入图片描述

raw和assets文件夹下的文件

我相信你对这两个文件夹并不陌生。如果我们不想将文件编译成二进制文件,我们可以将文件放在这两个目录中。两者之间的差异如下:
Res/raw:该文件将映射到R.java文件,该文件可以通过资源ID直接访问,并且不能具有目录结构,即不能创建文件夹
资产:它不会映射到R.java文件。可以通过资产管理器访问。它可以有一个目录结构,也就是说,它可以自己创建文件夹

AssetManager am =  getAssets();  
InputStream is = am.open("filename");

简单的加密处理流程
步骤1。用户注册帐户和密码。验证帐户和密码后(帐户是否重复、密码位数>6等),即帐户和密码有效。注册成功后,我们向服务器提交帐户和本地加密的密码!
步骤2。服务器会将用户提交的帐户和加密密码保存到服务器的数据库中,也就是说,服务器不会保存我们的明文密码(原始)!
步骤3。回到客户端,如果注册或登录成功,您需要将帐户密码保存到SP,并且保存的密码还需要经过加密过程!即明文密码-->再次加密并保存!如果不保存,则每次请求明文密码时,都必须经过主进程,然后向服务器请求加密密码!
步骤4。服务器验证帐户和加密密码。如果成功,它将为客户端分配会话ID,随后的客户端可以通过此会话访问服务器提供的相关服务!
在这里插入图片描述

Http协议的底层工作

我们首先需要知道两个名词:
SYN(同步):TCP/IP建立连接时使用的握手信号
ACK(确认):一个确认字符,用于确认发送的数据已被正确接受
然后是TCP/IP三重握手的概念:
客户端向服务器发送syn包(syn=j)并进入syn_SEND状态,然后等待服务器确认
服务器接收SYN包,确认客户端的SYN(ACK=j+1),同时发送一个SYN包(SYN=k),即SYN+ACK包,服务器进入SYN_RECV状态
客户端接收SYN+ACK分组并向服务器发送ACK(ACK=k+1)确认分组。发送后,客户端和服务器进入建立状态,完成三次握手,然后都开始传输数据

<?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="horizontal"
    android:padding="5dp"
    android:background="#6BBA79">

    <ImageView
        android:id="@+id/img_icon"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:src="@mipmap/iv_lol_icon1"
        android:focusable="false"/>

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        android:focusable="false"
        android:text="提莫"
        android:textSize="18sp" />

</LinearLayout>

用户单击浏览器上的url(超链接),web浏览器与web服务器建立连接
建立连接后,客户端向服务器发送请求。请求的格式为:统一资源标识符(URL)+协议版本号(通常为1.1)+MIME信息(多个标头)+空行
收到请求后,服务器将以以下格式给出相应的返回信息:协议版本号+状态行(处理结果)+多个信息头+空白行+实体内容(如返回的HTML)
客户端接收服务器返回的信息,通过浏览器显示,然后与服务器断开连接;当然,如果在一个步骤中发生错误,错误消息将返回给客户端并显示,例如经典的404错误!

   public MyBaseExpandableListAdapter(ArrayList<Group> gData,ArrayList<ArrayList<Item>> iData, Context mContext) {
        this.gData = gData;
        this.iData = iData;
        this.mContext = mContext;
    }

    @Override
    public int getGroupCount() {
        return gData.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return iData.get(groupPosition).size();
    }

    @Override
    public Group getGroup(int groupPosition) {
        return gData.get(groupPosition);
    }

    @Override
    public Item getChild(int groupPosition, int childPosition) {
        return iData.get(groupPosition).get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
网络协议 安全 API
WebSocket、Socket、TCP 和 HTTP 的差别与应用场景
WebSocket、Socket、TCP 和 HTTP 是网络通信中的四大“使者”,各具特色:HTTP 适合短时请求,TCP 稳定可靠,Socket 灵活定制,WebSocket 实现实时双向通信。本文用通俗语言解析它们的区别与应用场景,助你为项目选择最合适的通信方式。
1941 3
|
6月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
177 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
7月前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
360 69
|
6月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
615 19
|
6月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
196 18
|
4月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
311 0
|
6月前
|
网络安全 开发者
如何解决HTTPS协议在WordPress升级后对网站不兼容的问题
以上就是解决WordPress升级后HTTPS协议对网站的不兼容问题的方法。希望能把这个棘手的问题看成是学校的管理问题一样来应对,将复杂的技术问题变得更加有趣和形象,并寻觅出解决问题的方式。希望你的网站能在新的学期得到更好的发展!
187 19
|
4月前
|
Web App开发 缓存 数据安全/隐私保护
Django全栈实战:HTTP状态码与业务状态码的分层设计与实战应用
HTTP状态码是服务器响应请求的3位数字代码,分为1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)。业务状态码则用于描述具体业务逻辑结果,常在响应体中返回。二者在前后端交互中有不同用途和处理方式。本文还介绍了如何在Django项目中设计并使用业务状态码。
413 0
|
9月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
961 83
|
6月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
1763 2

热门文章

最新文章