如果我做一个简单的测试用例
@Test
public void myTest() throws Exception {
Spanned word = new SpannedString("Bird");
int length = word.length();
}
Run Code Online (Sandbox Code Playgroud)
抛出异常
java.lang.RuntimeException:未模拟android.text.SpannableStringInternal中的方法长度.有关详细信息,请参阅 http://g.co/androidstudio/not-mocked.
这在上面的链接中解释为
用于运行单元测试的android.jar文件不包含任何实际代码 - 由真实设备上的Android系统映像提供.相反,所有方法都抛出异常(默认情况下).这是为了确保您的单元测试仅测试您的代码,而不依赖于Android平台的任何特定行为(您没有明确嘲笑,例如使用Mockito).
那么你如何在Android项目中设置Mockito以模拟这样的类?
我想学习,所以我将在Q&A风格下添加我的答案.
我想在 a 中获取一种类型的所有跨度CharSequence并将它们转换为不同的类型。例如,将所有粗体跨度转换为下划线跨度:
我该怎么做?
(这是我今天面临的一个问题,既然我现在已经解决了,我在这里添加一个问答对。我的答案如下。)
我计划从 Android 和 iOS 开发切换到 Flutter。只需要维护一个代码库的想法非常令人兴奋。在这一点上,我仍然只是观察和学习。
不过,让我有点反感的一件事是创建小部件时代码缩进中的巨大山脉和山谷。这是从这个答案中获取的一个例子:
Widget build(BuildContext context) {
ThemeData themeData = Theme.of(context);
return new Scaffold(
body: new Padding(
padding: const EdgeInsets.all(10.0),
child:
new Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
new Row(
mainAxisAlignment: MainAxisAlignment.start,
children: icons.map((IconData iconData) {
return new Container(
margin: new EdgeInsets.all(10.0),
child: new IconButton(
icon: new Icon(iconData), onPressed: () {
// TODO: Implement
}),
);
}).toList(),
),
new Expanded(
child: new Align(
alignment: FractionalOffset.center,
child: new AspectRatio(
aspectRatio: 1.0,
child: new Stack(
children: <Widget>[ …Run Code Online (Sandbox Code Playgroud) 我想为Flutter项目创建一个空列表.
final prefs = await SharedPreferences.getInstance();
final myStringList = prefs.getStringList('my_string_list_key') ?? <empty list>;
Run Code Online (Sandbox Code Playgroud)
我似乎记得有多种方法,但一种推荐方式.我该怎么做?
这是我在Dart使用指南中找到答案后制作的Q&A风格的帖子.我的答案如下.
我试图像在Android中为RecyclerView适配器所做的那样,在AnimatedList上预生成所有更新操作。但是当我要清除所有数据时,我不知道该怎么做。
如果我这样做
setState(() {
_data.clear();
});
Run Code Online (Sandbox Code Playgroud)
然后清除了后备数据,但是GlobalKey的当前状态仍然不知道更改,并且没有任何clear()方法。
补充代码
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: Text('Update AnimatedList data')),
body: BodyWidget(),
),
);
}
}
class BodyWidget extends StatefulWidget {
@override
BodyWidgetState createState() {
return new BodyWidgetState();
}
}
class BodyWidgetState extends State<BodyWidget> {
// the GlobalKey is needed to animate the list
final GlobalKey<AnimatedListState> _listKey = GlobalKey();
// backing data
List<String> …Run Code Online (Sandbox Code Playgroud) 据我所知,Dart不支持字素簇,尽管有人说支持它:
在实施之前,通过字素簇进行迭代的选择有哪些?例如,如果我有这样的字符串:
String family = '\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}'; // ??
String myString = 'Let me introduce my $family to you.';
Run Code Online (Sandbox Code Playgroud)
在五个代码点的家庭表情符号后面有一个光标:
如何将光标向左移动一个用户可感知的字符?
(在这种特殊情况下,我知道了字素簇的大小,因此我可以做到,但是我真正要问的是找到任意长的字素簇的长度。)
更新资料
我从本文中看到,Swift使用了系统的ICU库。Flutter中可能有类似的可能。
对于那些想玩我上面的示例的人,这里是一个演示项目。按钮将光标向右或向左移动。当前需要按8个按钮才能将光标移到家庭表情符号上。
主镖
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Grapheme cluster testing')),
body: BodyWidget(),
),
);
}
}
class BodyWidget extends StatefulWidget {
@override
_BodyWidgetState createState() => _BodyWidgetState();
}
class _BodyWidgetState extends State<BodyWidget> {
TextEditingController …Run Code Online (Sandbox Code Playgroud) 在Android中,您可以使用与比例无关的像素(sp)来设置字体大小,以考虑在设置中选择的用户字体大小首选项。
android:textSize="26sp"
Run Code Online (Sandbox Code Playgroud)
在iOS中,您可以使用动态类型来实现类似目的。
label.font = UIFont.preferredFont(forTextStyle: .body)
label.adjustsFontForContentSizeCategory = true
Run Code Online (Sandbox Code Playgroud)
您如何在Flutter中做同样的事情?
我想获取任意字符串中的字节数。我可以这样做:
\n\nimport 'dart:convert';\nvoid main() {\n String str = '\xe4\xbd\xa0\xe5\xa5\xbd';\n final bytes = utf8.encode(str);\n print(str.length); // 2\n print(bytes.length); // 6\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但是有没有一种更直接的方法来做到这一点,而不涉及进行转换?
\n如何在 Dart 中检查字符串是否为“null”?(不是null物体)
是否有像 Java 那样的 Dart SDK API equals?
给出以下代码:
const jsonString = '{"myString":"Hello"}';
final jsonMap = jsonDecode(jsonString);
final myObject = MyClass.fromJson(jsonMap);
Run Code Online (Sandbox Code Playgroud)
使用此语法有多少种方法创建新对象:
MyClass.fromJson(jsonMap)
Run Code Online (Sandbox Code Playgroud)
最近,我一直在尝试了解命名构造函数、工厂构造函数和静态方法之间的区别,因此我将我的答案发布在下面,以便我将来可以作为参考。