初级安卓开发面试题,Flutter第7天--字体图标,安卓View+Handler+Binder


2.进入源码看看:

貌似都是静态常量,核心在unicode,如0xe577,还有就是字体(MaterialIcons)

/// * design.google.com/icons
class Icons {
Icons._();

// Generated code: do not hand-edit.
// See https://github.com/flutter/flutter/wiki/Updating-Material-Design-Fonts
// BEGIN GENERATED

/// 360 — material icon named “360”.
static const IconData threesixty = IconData(0xe577, fontFamily: ‘MaterialIcons’);

/// 3d_rotation — material icon named “3d rotation”.
static const IconData threed_rotation = IconData(0xe84d, fontFamily: ‘MaterialIcons’);

/// 4k — material icon named “4k”.
static const IconData four_k = IconData(0xe072, fontFamily: ‘MaterialIcons’);


3.怎么才能自定义字体图标

玩前端的应该都知道:还是进入阿里图标神库:iconfont

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


4.根据Flutter内置的类,我写了一个自动代码生成器

虽然直接也能用,不够要记住图标的unicode码,算了,还是跟Flutter看齐吧

注意:为了简单使用:拷贝到的位置,命名,请务必和下面保持一致!保持一致!
把两个文件拷贝到对应处,icon_by_toly.dart写好(在下面),右键运行就自动生成iconfont.dart

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码生成器:icon_by_toly.dart

import ‘dart:io’;

main() {
var result = “”"import ‘package:flutter/widgets.dart’;
//Power By 张风捷特烈— Generated file. Do not edit.

class TolyIcon {

TolyIcon._();
“”";

var fileCss = File.fromUri(Uri.parse(“${Uri.base}iconfont/iconfont.css”));
if (!fileCss.existsSync()) {
return;
}

var read = fileCss.readAsStringSync();

var split = read.split(“.icon-”);
split.forEach((str) {
if (str.contains(“before”)) {
var split = str.split(“:”);
result += “static const IconData " +
split[0].replaceAll(”-“, “_”) +
" = const IconData(” +
split[2].replaceAll(“”\“, “0x”).split(”“”)[0] +
“, fontFamily: “TolyIcon”);\n”;
}
});
result+=“}”;
fileCss.delete();

var fileOut = File.fromUri(Uri.parse(“${Uri.base}lib/iconfont.dart”));
fileOut.writeAsStringSync(result);

var config=“”"
fonts:

  • family: TolyIcon
    fonts:
  • asset: iconfont/iconfont.ttf
    “”“;
    var yaml = File.fromUri(Uri.parse(”${Uri.base}pubspec.yaml"));
    if (yaml.readAsStringSync().contains(“TolyIcon”)) {
    return;
    }
    yaml.writeAsString(config,mode: FileMode.append);
    }

pubspec.yaml的flutter标签下也会自动生成配置:

fonts:

  • family: TolyIcon
    fonts:
  • asset: iconfont/iconfont.ttf

Icon(TolyIcon.icon_spring_boot)//颜色可自行处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


友情提示:下载之前最好把图标名字改一下,不然之后找起来费劲

如果实在不想该,可以点击这里查看名字和图标的对应情况

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


二、综合小案例
1.初始代码:主页面:android_stack.dart

import ‘package:flutter/material.dart’;

class AndroidPage extends StatefulWidget {
@override
_AndroidPageState createState() => _AndroidPageState();
}

class _AndroidPageState extends State
with SingleTickerProviderStateMixin {

@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {

var scaffold = Scaffold(
appBar: AppBar(
title: Text(“张风捷特烈”),
),
body: Container(),
floatingActionButton: FloatingActionButton(
onPressed: () {

},
tooltip: ‘Increment’,
child: Icon(Icons.add),
),
);

return scaffold;
}
}


2.拼接底部条

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


2.1:常量的准备:(为了方便使用或修改)

class ItemBean {
Color color;
IconData iconId;
String info;
ItemBean(this.color, this.iconId, this.info);
}

//底部栏图标信息
var iconLi=[
ItemBean(Color(0xff8FC552),TolyIcon.android,“Android”),
ItemBean(Color(0xff6BFB00),TolyIcon.icon_spring_boot,“SpringBoot”),
ItemBean(Color(0xff63DAFF),TolyIcon.react,“React”),
ItemBean(Color(0xffF3D861),TolyIcon.biji,“编程随笔”),
ItemBean(Color(0xff5CEBF2),TolyIcon.daima,“系列文章”)
];


2.2:底部栏:

//成员变量
int _curIndex = 0;

//底部栏
var bottomNavigationBar = BottomNavigationBar(
items: iconLi.map((item) {
return BottomNavigationBarItem(
title: Text(
item.info,
style: TextStyle(fontSize: 12, color: Colors.black),
),
icon: Icon(
item.iconId,
color: item.color,
),
backgroundColor: Color(0xffffffff));
}).toList(),
currentIndex: _curIndex,
onTap: _onTapBNB,
);


2.3:底部栏点击监听:_onTapBNB

//底部栏点击监听
void _onTapBNB(int position) {
_curIndex = position;
setState(() {});
}


3:页面条目:

第五天写了几个条目,现在拿来用(详细分析见第五天,这里不废话了)

静态填充左侧滑栏
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
3.1:左侧滑栏:left_draw.dart

class LeftDrawPage extends StatefulWidget {
@override
_LeftDrawPageState createState() => _LeftDrawPageState();
}

class _LeftDrawPageState extends State
with SingleTickerProviderStateMixin {
@override
Widget build(BuildContext context) {
//左边头像
var headImg3 = Image.asset(
“images/icon_90.png”,
width: 50,
height: 50,
);
//中间的信息
var center3 = Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
“张风捷特烈”,
style: bigStyle,
),
Row(
children: [
Icon(Icons.next_week, size: 15),
pd(Text(“创世神 | 无”), l: 5)
],
),
Row(
children: [
Icon(Icons.keyboard, size: 15),
pd(Text(“海的彼岸有我未曾见证的风采”), l: 5)
],
),
],
);
var rowLine3 = Row(
children: [
pda(headImg3, 5),
Expanded(child: pda(center3, 5)),
],
);
var test3 = Card(
child: Container(
height: 95,
color: Colors.white,
padding: EdgeInsets.all(5),
child: rowLine3));
return Drawer(
elevation: 5,
child: Container(
padding: EdgeInsets.only(top: 50),
alignment: AlignmentDirectional.topCenter,
color: Color(0xff99C6F9),
child: test3));
}
}


3.2:列表静态填充:home_list.dart

class HomeListPage extends StatefulWidget {
@override
_HomeListPageState createState() => _HomeListPageState();
}

class _HomeListPageState extends State {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: 10,
itemBuilder: (BuildContext context, int index) {
return renderItem(index);
},
);
}

renderItem(int index) {
-----------------测试4--------------------------------
var line1_4 = Row(
children: [
Image.asset(“images/icon_90.png”, width: 20, height: 20),
Expanded(
child: pd(Text(“张风捷特烈”), l: 5),
),
Text(
“Flutter/Dart”,
style: infoStyle,
)
],
);

var center_right = Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
“Flutter第4天–基础控件(下)+Flex布局详解”,
style: littelStyle,
maxLines: 2,
),
pd(
Text(
“1.2:优雅地查看:图片的适应模式–BoxFit1.3:优雅地查看:颜色混合模式–colorBlendMode”,
style: infoStyle,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
t: 5),
],
);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

在此为大家准备了四节优质的Android高级进阶视频:

架构师项目实战——全球首批Android开发者对Android架构的见解

附相关架构及资料

image.png

往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

决问题。**

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值