我已经阅读了一些关于弃用代码的文章和答案(包括这一篇),但我对如何处理(特别是)不推荐使用的Fragment事件处理程序感到困惑onInflate.
我已经取代了我的实现
public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState)
Run Code Online (Sandbox Code Playgroud)
同
public void onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState)
Run Code Online (Sandbox Code Playgroud)
如果我在<API23计算机上运行我的应用程序,则不会调用替换代码.
如果我恢复原来弃用的代码(这样我现在已经实现了两个方法),那么调用已弃用的代码,返回正确的功能,但现在正在调用不推荐的方法(?).
当我在API23机器上运行应用程序时,似乎会调用处理程序的两个版本.
所以问题是,这里发生了什么?如果我正在编写应该在API23和早期版本上运行的代码,我是否需要实现已弃用的方法以及新方法?
如果是这种情况,我是否需要寻找并实施其他已弃用的方法"以防万一"?(因此,是否存在这些已弃用的方法的列表以"反向编码"?)
更新:
我现在已经从使用android.app.Fragment改为android.support.v4.app.Fragment(即从原生片段到支持片段),应用程序现在按预期执行,替换处理程序代码运行所有版本,并按预期逐步执行android源代码.
但问题仍然存在:为什么?
为什么 '原生' android.app.Fragment实施****?回顾之前的问题,然后在2015年9月讨论了这个问题.为什么它仍然是一个问题?而且为什么应该有在支持和原生片段执行情况的差异发布API 11?
启动flutter应用程序时,我在哪里运行初始化代码?
void main() {
return runApp(MaterialApp(
title: "My Flutter App",
theme: new ThemeData(
primaryColor: globals.AFI_COLOUR_PINK,
backgroundColor: Colors.white),
home: RouteSplash(),
));
}
Run Code Online (Sandbox Code Playgroud)
如果我想运行一些初始化代码,比如获取共享首选项,或者(在我的情况下)初始化一个包(并且我需要传入 MaterialApp 小部件的 BuildContext),那么正确的方法是什么?
我应该将 MaterialApp 包装在 FutureBuilder 中吗?还是有更“正确”的方式?
- - - - 编辑 - - - - - - - - - - - - - - - - - - - - - ---------
我现在已经将初始化代码放在RouteSplash()小部件中。但是由于我需要应用程序根的 BuildContext 进行初始化,所以我在 Widgetbuild覆盖中调用了初始化并传入了context.ancestorInheritedElementForWidgetOfExactType(MaterialApp). 因为我不需要在显示启动画面之前等待初始化完成,所以我没有使用Future
我已经为我的应用程序实现了 pip。
我注意到在画中画支持文档中建议
android:configChanges=
"screenSize|smallestScreenSize|screenLayout|orientation"
Run Code Online (Sandbox Code Playgroud)
被添加到清单中。这会在应用程序进入 pip 模式时阻止 Activity 生命周期触发。我希望重新创建活动 - 因此重新创建布局。
很简单,我只是不使用那条线。
所以现在我的活动被创建并且布局膨胀。现在只有 Android 正在膨胀<layout>-small.xml。现在这是一个比膨胀“正常”布局更好的选择,但对于 pip 模式来说,它的布局仍然太大。(小屏幕 - 如文档中所述,至少 426dp x 320dp - pip 比这小得多。
所以我的问题是 - 是否有一个尚未记录的 pip 大小布局的布局配置限定符,或者我是否必须调整我的小布局以确保所有内容都位于中间以便可以看到(不是一个非常令人满意的解决方案) .
编辑
这里是一个限定-pip ,即<layout>-pip.xml,这是我发现的事故,那编译没有错误“无效的资源目录名称”。美好时光。
但是-small当进入 pip 模式时,Android 仍然会夸大布局。艰难时期
更新
我最终通过创建额外的简化布局来实现这一点,我在onCreate检查后加载这些布局isInPictureInPictureMode()。这不是我理想的解决方案,但在我有更好的解决方案之前,它就是这样。
android android-layout android-configchanges android-7.0-nougat android-8.0-oreo
//access to a Constant if it was like another language
ImageWeather.Desktop.cloud;
//What i wanted ( not working because there is no inner class)
class ImageWeather {
class Desktop {
static const String cloud = 'assets/images/DesktopCloud.png';
static const String noCloud = 'assets/images/DesktopNoCloud.png';
static const String rain = 'assets/images/DesktopRain.png';
}
class Phone{
static const String cloud = 'assets/images/PhoneCloud.png';
static const String noCloud = 'assets/images/PhoneNoCloud.png';
static const String rain = 'assets/images/PhoneRain.png';
}
}
//access to a String like an inner class with new …Run Code Online (Sandbox Code Playgroud) 我有一个自定义view显示 adrawable并检测触摸。它有许多drawable层,其中一些包含文本,例如,
我已将每个 SVG 矢量图形转换为一个,vector drawable并希望能够将文本设置为资源,以便我可以替换不同的翻译。
上面“Hello box”的 SVG xml 代码:-
<svg
width="800"
height="400"
viewBox="0 0 800 400.00001"
id="svg5772"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="HELLO in a box.svg">
<defs
id="defs5774" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
<rect
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect6320"
width="468.57144"
height="128.57143"
x="174.28572"
y="786.64795"
rx="0"
ry="0" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="348.57141"
y="869.50507"
id="text6322"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6324"
x="348.57141"
y="869.50507">HELLO!!!</tspan></text>
</g>
</svg>
Run Code Online (Sandbox Code Playgroud)
...转换为这个vector drawablexml :-
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportWidth="800"
android:viewportHeight="400"
android:width="800dp"
android:height="400dp">
<group …Run Code Online (Sandbox Code Playgroud) 有没有办法自定义 Flutter 工具提示以更改颜色并增加填充/边距。默认似乎填满了整个屏幕的宽度,并且没有命名参数来进一步配置它。下面的代码产生一个Tooltip如屏幕截图所示。
Tooltip(child: IconButton(icon: Icon(Icons.info, size: 30.0)),
message: 'Lorem ipsum dolor sit amet, consectetur '
'adipiscing elit, sed do eiusmod tempor incididunt '
'ut labore et dolore magna aliqua. '
'Ut enim ad minim veniam, quis nostrud exercitation '
'ullamco laboris nisi ut aliquip ex ea commodo consequat',
padding: EdgeInsets.all(20),
preferBelow: true,
verticalOffset: 20,
)
Run Code Online (Sandbox Code Playgroud)
我至少尝试将它从屏幕边缘填充并以更紧凑的方式显示它。显然,包装TooltipinPadding只会影响子小部件 (the IconButton) 而不是它Tooltip本身的定位。
理想情况下,我希望显示与以下格式类似的工具提示。非常理想的是,我希望通过单击而不是长按来显示它。我猜Tooltip不一定是我应该使用的小部件?
我从演示中复制了该代码的基本结构,并根据自己的需要对其进行了调整(并针对这个问题进行了缩减)。
但我对一些事情感到困惑。也许 Dart 专家可以启发我......
import 'package:flutter/material.dart';
// Show policy widget - shows
class ShowPolicy extends StatelessWidget {
final Policy policy;
ShowPolicy(this.policy);
@override
Widget build(BuildContext context) {
return Text('Test text ' + policy.riskName + ' ' + policy.policyNumber);
}
}
// Policy class
class Policy {
final String riskName;
final String policyNumber;
Policy( { this.riskName, this.policyNumber } );
}
// what is this variable doing here?. Shouldn't it be an a class?
List<Policy> allPolicies = [
Policy(riskName: 'Lilly', policyNumber: 'PY123456-4'),
Policy(riskName: …Run Code Online (Sandbox Code Playgroud) ^ ^ ^^ ^ 不!这个问题没有答案!^ ^ ^ ^ ^ ^
我有问题Navigator.popUntil。我写了一个小演示应用程序来展示发生了什么。在我将此作为错误发布之前,我使用popUntil错了吗?
调用 popUntil 显示
看起来有些东西正在锁定导航器(设置_debugLocked)而不是释放它。
main.dart 下面:(可以直接粘贴到 Flutter 演示应用程序中)
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Routing Test Page'),
onGenerateRoute: (RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(
builder: (_) …Run Code Online (Sandbox Code Playgroud)