Android编程权威指南(第二版)学习笔记(八)—— 第8章 使用布局与组件创建用户界面

Android编程权威指南第3版 简单的项目作业 文章目录前言1. 要求描述2. MainActivity.java3. InfoActivity.java4. activity_info.xml5. activity_main.xml6. strings.xml7. AndroidManifest.xml运行结果 前言 本文参考《Android编程权威指南》第三版。 仅供学习,侵权即删。 如有不当之处,还望指正。 1. 要求描述 请按照图示顺序,开发一个Android 项目,首先出现第一个图示,用户名请输入自己的姓名,密码是自己的学号,确认后出 阅读详情

本章主要介绍了一些进阶的界面设计知识,以及如何用图形化界面设计 UI (虽然不推荐日常使用,但是至少要知道,特别是在 Android Studio 2.2 推出之后,可以直接查看设计蓝图,更为直观并且容易调整细节)。

GitHub 地址:
完成第八章,但未完成挑战
完成第八章的挑战

1. 样式(style) 与 主题(theme)

为什么我们需要样式(style)? 因为当界面有统一风格时,就不需要针对每一个控件单独写属性了,规定几种样式(style)即可。

style 是 XML 资源文件,含有用来描述组件行为和外观的属性定义。例如,下面的样式能让其显示的文字大小大于一般的值。

<style name="BigTextStyle">
    <item name="android:textSize">20sp</item>
    <item name="android:padding">3dp</item>
</style>

我们可以在 res/values/ 目录下的样式文件中写入自己需要的属性定义,然后再布局文件中以 @style/my_own_style(file name) 的形式引用

什么是主题(theme)呢?主题是各种样式的集合,从结构上来说,主体本身也是一种样式资源,不过它的属性指向了其他样式资源

主题属性引用 顾名思义就是将预定义的应用主题样式添加给指定组件,比如给 TextView 控件定义下面的属性:

<style="?android:listSeparatorTextViewStyle">

意味着告诉 Android 运行资源管理器:“在应用主题里找到名为 listSeparatorTextViewStyle 的属性。该属性指向其他样式资源,请将其资源的值放在这里。”

2. margin 与 padding

Android 布局文件中的 margin 和 padding 跟 Web 编程的一样,具体定义如下:
- margin 指的是外边距,即指定视图组件之间的距离
- padding 指的是内边距,即指定视图外边框与其内容间的距离

两者之间区别如下图:
margin 和 padding

3. dp、sp 及屏幕像素密度

Android 使用密度修饰 drawable 目录(如 drawable-xhdpi)下的图像文件会自动适配不同像素密度的屏幕。那么问题来了,加入图像完成了自动适配,但是边距无法缩放适配,或者用户配置了大于默认值的文字大小,会出现什么意外呢?

为了解决这些可能的问题,Android 提供了密度无关的尺寸单位(density-independent dimension unit)。使用这种单位,可在不同屏幕密度的设备上获得同样的尺寸。无需进行麻烦的转换计算,应用运行时,Android 会自动将这种单位转换成像素单位。

1. dp (dip, density-independent pixel) 密度无关像素

所谓密度无关,即和屏幕的像素密度没有关系。1dp 单位在设备的屏幕上总是等于 1/160 英寸。使用 dp 的好处是,无论屏幕密度如何,总能获得同样的尺寸。

px = dp * (dpi / 160)

其中,dpi 即等于我们常说的 ppi,计算公式即为

ppi = sqrt(屏幕横向像素数的平方 + 屏幕纵向像素数的平方)/ 屏幕对角线英寸数

那么常见的 mdpi, hdpi 是什么呢?对应关系如下图:
ppi 对应尺寸

也就是说 160ppi 像素密度的屏幕,又叫 mdpi 的屏幕,程序中写的 1dp 在上面呈现的就是 1 像素(pixel,px)。

2. sp (scale-independent pixel) 缩放无关像素

这种像素也与屏幕无关,但是与设置有关,一般用来设置文本的大小。

4. android:layout_weight 属性

在 LinearLayout 中,有这样一个特殊属性,它能让你自由分配摆放部件后的空间,避免大量留白。它就是 android:layout_weight,这里的 weight 是权重的意思,也就是说,每个部件都有自己的权重,用于分配摆放部件后剩余的空间。也就是说,如果两个部件权重都是 1 时,它们平分摆放它们之后的剩余空间。

但是这样就会出现一个问题,由于分配的是剩余的空间,所以在两个部件 layout_width 属性不一致(wrap_content 不算一致)时,layout_weight 属性不能使部件平分整块屏幕。如果想要平分怎么办呢?把两个部件的 layout_width 都设为 0dp 再保持其 weight 相等,也就是把整块屏幕都当做剩余空间,就能平分整块屏幕了。

5. 挑战练习:日期格式化

我使用的是 SimpleDateFormat 类,它能通过字符串来直接格式化 Date 类型的数据。

SimpleDateFormat sdf = new SimpleDateFormat("EEEE, MMM d, y", Locale.US);
mDateButton = (Button) v.findViewById(R.id.crime_date);      mDateButton.setText(sdf.format(mCrime.getDate()));
Android编程权威指南第3版 2.9 挑战练习:从按钮到图标按钮 目录前言1. 题目描述2. MainActivity.java3. Question.java4. activity_main.xml5. strings.xml6. 效果 前言 本文参考《Android编程权威指南》第三版。 仅供学习,侵权即删。 如有不当之处,还望指正。 本博客是在上一篇的基础上进行修改的。 这是上一篇博客链接:Android编程权威指南第3版 2.8 挑战练习:添加后退按钮 1. 题目描述 如果前进与后退按钮上只显示指示图标,用户界面更清爽,如下图: 要完成此练习,需将普通的Butt 阅读详情

相关推荐

Android编程权威指南:从基础到高级的开发实战

Android,一个以Linux为基础的开源操作系统,最初由Android Inc. 开发,后来被Google于2005年收购。其目标是为移动设备提供一个全面的、多样化的软件平台。Android的设计允许广泛的硬件制造商和软件开发者在此平台上进行创新,从智能手机和平板电脑到穿戴设备和电视等。

weixin_42524864的博客 1154

密度无关的像素(DIP)

指一个抽象意义上的像素,程序用它来定义界面元素。它作为一个与实际密度无关的单位,帮助程序员构建一个布局方案(界面元素的宽度,高度,位置)。 一个与密度无关的像素,在逻辑尺寸上,与一个位于像素密度为160DPI的屏幕上的像素是一致的,这也是Android平台所假定的默认显示设备。在运行的时候,平台会以目标屏幕的密度作为基准,“透明地”处理所有需要的DIP缩放操作。要把密度无关像素转换为屏幕像素,可

dhy270498872的专栏 2052

开源xDing下载与安装

详见https://blog.youkuaiyun.com/xuzihang_python/article/details/132939469

“ px”,“ dip”,“ dp”和“ sp”有什么区别?

Android度量单位有什么区别? 像素 蘸 dp SP

asdfgh0077的博客 2401

android修改系统时间(附详细使用说明)

android修改系统时间(附详细使用说明),已多次测试,现在正在使用中。

Android开发权威指南 第二版

Android开发权威指南 第二版

Koltin46,Android开发知识点

android:text=“蜂鸟专送” android:textColor="#fff" android:textSize=“12sp” android:padding=“3dp” android:layout_gravity=“center_vertical” android:background="#468ade" android:layout_marginRight=“4dp” /> <TextView android:layout_width=“wrap_content” android

m0_66155658的博客 501

react +ant desiagn pro实现按钮操作权限控制

在ant desiagn pro中提供了一个access用于对权限进行控制,需引入useAccess和Access

Sylvasylva的博客 2211

Android编程权威指南(第三版)第八章挑战练习:recyclerView viewType

题目要求如图:1、因为有两个列表项,所以要新建一个xml布局文件,我这里命名为“list_item_call_crime.xml”,其实就在原来基础上多加一个按钮&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi...

Zou997125136的博客 1180

华硕电脑Win10改Win7系统:BIOS设置详解

通过上述步骤,华硕电脑用户可以将系统从Windows 10更改为Windows 7。虽然这个过程可能涉及一些技术细节和潜在的风险(如数据丢失和驱动不兼容),但只要按照指南仔细操作并做好准备工作,大多数用户应该能够成功完成系统回滚。请记住,在进行任何系统更改之前都要备份重要数据,并确保已了解所有潜在的风险和限制。希望本文能够帮助到需要回滚到Windows 7的华硕电脑用户!

nntxthml的博客 2262

XGBoost与Embedding混合建模实战解析

在机器学习领域,特征工程与模型融合是提升预测性能的关键技术。Embedding技术通过将高维稀疏特征(如文本、ID类数据)转化为低维稠密向量,有效捕获语义关联;而XGBoost作为强大的集成学习算法,擅长处理结构化特征并进行自动特征组合。两者结合的混合架构(如Semantic Boosted Trees)在金融风控和推荐系统等场景中展现出显著优势,尤其在处理用户行为序列、商品ID等复杂特征时,相比传统方法能获得更好的模型效果。本文通过电商推荐和金融反欺诈等案例,详解如何实现Embedding+XGBoost

weixin_28718641的博客 325

Android权威编程指南笔记 第八章 使用RecycleView显示列表

文章目录第八章 使用RecycleView显示列表一.布置RecycleView1.添加到Fragment(在`onCreateView()`中)二.创建viewHolder1.实例化布局2. 将数据模型与ViewHolder相关联三.创建Adapter四.刷新列表项五.相关小记六.挑战练习 第八章 使用RecycleView显示列表 整体相关代码在CrimeListFragment中(便于...

朝辞的博客 677

VisionMaster -Group循环、数组数据格式化

这里创建一个格式化工具,按照自己想要的模式格式化刚刚输出的数据。因为是检测多个物体,所以这里选择输出的是数组。第一次的模板很不满意,反复调整参数也没好,边缘不整齐,强迫症患者受不了。实测如果输入设置太多,会导致模块失效,所以尽量选择需要的少量参数。这里要打开循环使能,循环数值就是高精度匹配的匹配个数。Group输出设置里选择刚刚建立的数据集。左边是主流程,右边是组合模块内部流程。修改采图这里的曝光值,图像提亮一点。建一个数据集,把想要的数据收集起来。用TCP助手测试一下OK。成功得到了想要的数据。

weixin_69505365的博客 4531

Android编程权威指南(第4版)

《Android编程权威指南(第4版)》 Android开发入门与进阶不二之选,新版使用Kotlin编写,七个Android应用开发实战项目,传授一线开发经验,兼容Android 5.0 到 11.0。 Big Nerd Ranch是美国一家专业的移动开发技术培训机构。本书主要以其Android训练营教学课程为基础,融合了几位作者多年的心得体会,是一本完全面向实战的Android 编程权威指南。全书共32章,详细介绍了七个Android应用的开发过程。通过这些精心设计的应用,读者可掌握很多重要的理论知识

scone5的博客 3309

Dify智能体开发:发布嵌入网站

Dify 支持将你的 AI 应用嵌入到业务网站中,你可以使用该能力在几分钟内制作具有业务数据的官网 AI 客服、业务知识问答等应用。点击 WebApp 卡片上的嵌入按钮,复制嵌入代码,粘贴到你网站的目标位置。

王国平的博客 3245

基于simulink的电气弹簧ES稳压控制模型仿真

若要补偿母线电压的谐波,需控制ES上的谐波,即在单闭环母线电压有效值控制的基础上,增加谐波抑制环节来进行谐波控制,现有的各种检测和抑制谐波的方法有采用模拟滤波器、傅里叶分析进行谐波分析、基于瞬时无功功率理论的方法等。当关键负载ZC为电流源型非线性负载时,电路原理图如图7所示,由于电流源型非线性负载可以等效为谐波电流源,关键负载电流ic便会含有谐波分量,导致输电线电流is和母线电压VS同样会含有谐波分量,导致供电质量的严重下降,对用电设备的正常工作造成影响。分别为流过线路阻抗、非关键负载、关键负载的电流,

FPGA/MATLAB学习教程/源码/项目合作开发 1633

android编程权威指南 第4版 pdf

Android 编程权威指南 第4版 PDF 实现教程 在这个教程中,我们将教会你如何顺利实现“Android 编程权威指南 第4版”这本书中的示例项目。作为一名刚入行的小白,只要你按照下面的步骤进行,就能够理解项目的结构,并完成相关的代码实现。 项目流程 以下是实现这个项目的整体流程: 步骤 描述 时间预估 ...

weixin_36415235的博客 704

Linux 内核参数:meminfo

内存管理是一个相对复杂的内核模块,错综复杂的数据结构和管理逻辑。Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。本文要分析的节点meminfo是Linux 操作系统中查看系统内存最准确(meminfo 中有内存黑洞)的方法,它包含当前时刻系统的所有物理页面的信息。

私房菜 2414

Android编程权威指南[pdf]

下载地址: Android编程权威指南.pdf 内容简介: 权威、全面、实用、易懂,是本书最大的特色。本书根据美国大名鼎鼎的Big Nerd Ranch训练营的Android培训讲义编写而成,已经为微软、谷歌、Facebook等行业巨头培养了众多专业人才。作者巧妙地把Android开发所需的庞杂知识、行业实践、编程规范等融入一本书中,通过精心编排的应用示例、循序渐进的内容组织,以及循循善诱的语言,深入地讲解了Android开发的方方面面。如果学完一章之后仍然意犹未尽,那“挑战练习”一定会让你大呼过瘾..

lineryi的专栏 3206

第1章第11节:创建可容纳多行滚动文字的输入框TextEditor [SwiftUI快速入门到实战]

TextField可以让用户输入单行的文字内容,若想输入多行的文字内容,可以使用能够容纳多行滚动文字的 TextEditor。 定义一个字符串属性,用来存储用户输入的文字内容。接着定义一个布尔属性,用来标识是否弹出警告窗口,以显示用户输入的内容。 TextEditor是由UIKit中的UITextView演变而来,因此可以在init方法中,通过UITextView修改TextEditor的外观属性。 添加一个VStack视图,作为子视图的容器。 创建一个TextEditor,Te..

互动教程网[www.hdjc8.com] 832

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android编程权威指南(第9章 使用布局与组件创建用户界面)

9.2.1使用ConstraintLayout 1.按图中步骤 2.OK 3.在build.gradle中查看是否导入ConstraintLayout 9.2.2 1.调整组件的大小 2.添加视图imageView 双击imageView 对其添加约束 3.ImageView的约束XML形式(list_item_crime.xml) app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_

qq_48726341的博客 256

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

《Google Android 编程权威指南.pdf》清晰中文完整版:权威、全面的Android学习资源

《Google Android 编程权威指南.pdf》清晰中文完整版:权威、全面的Android学习资源 【下载地址】GoogleAndroid编程权威指南.pdf清晰中文完整版 《Google Android 编程权威指南》是Android开发领域的经典之作,由Big Nerd Ranch资深专家撰写,内容权威且全面,...

gitblog_06725的博客 701

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android编程权威指南第三版第二章课后习题

android编程权威指南第三版第二章课后习题 #android编程权威指南第三版第二章课后习题 2.7 挑战练习:为 TextView 添加监听器 在控制台添加监听代码即可 mQuestionTextView=(TextView)findViewById(R.id.question_text_view); mQuestionTextView.setOnClickListener(new View...

wang_nian的博客 850

Android编程权威指南第3版第七章

目录前言1. string.html2. activity_crime.xml3. fragment_crime.xml4. MainActivity.java5.CrimeFragment.java6. Crime.java7. 效果图 前言 本文参考《Android编程权威指南》第三版。 仅供学习。如有不当之处,还望指正。 1. string.html <resources> <string name="app_name">CriminalIntent</strin

m0_50043719的博客 1566

Android编程权威指南(第二版)学习笔记(二十三)—— 第23章 HTTP 与后台任务

本章主要讲了如何使用 android 系统的网络连接,并介绍了格式化 JSON 和多线程编程 AsyncTask 的使用。另外,挑战练习里还结合了 Gson 库的使用。

退而结网 1358

基于《Android编程权威指南》前5章完成的一个Android App

基于《Android编程权威指南》前5章完成的一个Android App 简介 上学期学了Android编程,期末做了一个课程设计–QuizGame(猜谜游戏)。 项目地址: https://github.com/Xiawen9/AndroidApp 有两个课程设计,分别是移动开发技术大作业和移动开发技术实验。以下是要求: 移动开发技术大作业 1、按照《Android编程权威指南》做完前五章,并...

学而不思则罔,思而不学则殆。 450
上一篇: Android编程权威指南(第二版)学习笔记(七)—— 第7章 UI fragment 与 fragment 管理器
下一篇: Android编程权威指南(第二版)学习笔记(九)—— 第9章 使用 RecyclerView 显示列表
Kniost
博客等级 码龄16年 19粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值