我必须使用一个OnGlobalLayoutListener对象,然后删除监听器,我有一个问题与我用以下代码解决的弃用方法.
protected void onCreate(Bundle savedInstanceState) {
final LinearLayout llTotal = (LinearLayout) findViewById(R.id.mmc_ll);
ViewTreeObserver vto = llTotal.getViewTreeObserver();
if(vto.isAlive()){
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//
// mycode
//
if (Build.VERSION.SDK_INT<16) {
removeLayoutListenerPre16(llTotal.getViewTreeObserver(),this);
} else {
removeLayoutListenerPost16(llTotal.getViewTreeObserver(), this);
}
}
});
}
super.onCreate(savedInstanceState);
}
@SuppressWarnings("deprecation")
private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeGlobalOnLayoutListener(listener);
}
@TargetApi(16)
private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeOnGlobalLayoutListener(listener);
}
Run Code Online (Sandbox Code Playgroud)
这是对的吗?有更好的方法来处理兼容性?
使用API 10在模拟器中运行代码我在LogCat中有以下警告
04-24 09:30:12.565: I/dalvikvm(471): Could not find method android.view.ViewTreeObserver.removeOnGlobalLayoutListener, referenced from method com.my.project.ActivityHome.removeLayoutListenerPost16
04-24 …Run Code Online (Sandbox Code Playgroud) 我正在使用Angular CLI(1.1.2)构建一个Angular4项目.它在Chrome(版本59.0.3071.115)和firefox(54.0.1)中运行完美,但是当我尝试使用IE11(Verison 11.0.9600.18738)时,nothings出现并且当我在IE中打开开发模式时,它显示以下错误:
SCRIPT5022: Exception thrown and not caught
File: polyfills.bundle.js, Line: 829, Column: 34
Run Code Online (Sandbox Code Playgroud)
详细的错误消息如下:
谁知道如何解决这个问题?
谢谢!
compatibility internet-explorer polyfills angular-cli angular
我的计算机上安装了Internet Explorer,但需要测试IE 7的兼容模式.将文档模式更改为IE 7后,将其设置为默认值,现在我无法更改它.IE7上的默认设置是什么?

如何设置文档模式默认值?
compatibility internet-explorer ie-developer-tools internet-explorer-11
随着iOS4即将推出,我已经计划在我的应用程序的未来更新中包含iAd.我认为这将使我的应用程序无法用于固件低于4.0的任何人.有没有办法根据用户的固件更改变量和.xib文件?干杯.
我知道你不能(至少不容易)在SQL Server 2008上恢复SQL Server 2012备份.但它如何适用于SQL Server 2014到SQL Server 2012?
在数据库级别,可以将兼容性模式调整为任何其他SQL Server版本.
这有什么帮助或工作?它只会禁止2014年的功能吗?
说实话,我已经尝试恢复备份,但2012年没有识别数据文件,所以我无法点击ok Button启动恢复过程.
我错过了一些重要的选择吗?
sql sql-server compatibility sql-server-2012 sql-server-2014
我的机器上安装了Java 6和7.Gradle使用1.7(使用检查gradle -v).但我需要编译我的代码以与Java 1.6兼容.据我所知文档,我可以使用该sourceCompatibility属性(并间接targetCompatibility默认为 sourceCompatibility).
所以我将以下行添加到我的构建文件中(在根级别,而不是在任何闭包中):
sourceCompatibility = 1.6
Run Code Online (Sandbox Code Playgroud)
(可以肯定的是,我也在targetCompatibility = 1.6一些试验中添加了,但这不应该有所作为)
要检查结果是否与1.6实际兼容,我将生成的jar解压缩cd到WEB-INF/classes文件夹中,并javap -verbose在.class我遇到的第一个文件中使用.但无论我是设置目标兼容性还是我使用1.5而不是1.6或者我是否将其指定为string('1.6'),每次javap的结果是
minor version: 0
major version: 51
Run Code Online (Sandbox Code Playgroud)
Afaik这意味着它是Java 1.7字节码,这是错误的.
有什么想法sourceCompatibility- 设置不起作用?或者javap不是检查兼容性的正确方法?
更新: 是的,这实际上是一个多项目构建,但我只检查了一个子项目的构建结果.在这个子项目的构建文件中,我做了上述更改,以确保它们实际应用.另外,我在根项目的构建文件中添加了以下内容(如@Vidya所提议的那样):
allprojects {
sourceCompatibility = 1.6
targetCompatibility = 1.6
}
Run Code Online (Sandbox Code Playgroud)
但这也没有帮助.
更新2: 我在相关的build.gradle文件中使用此代码片段检查了sourceCompatibility的设置:
compileJava.doFirst {
println "source compatibility " + sourceCompatibility
}
Run Code Online (Sandbox Code Playgroud)
它显示我的sourceCompatibility设置为1.7,虽然我试图将其设置为1.6.当我提取最简单的子项目并自行构建时,sourceCompatibility设置正确,Java Byte代码与1.6兼容.但是,即使这个子项目在多项目构建中使用时也使用了错误的sourceCompatibility.
BTW:我在一些子项目使用的插件是:java,war,jetty,gwt …
我正在编写一个应用程序,该应用程序使用仅在最新API级别提供的某些功能和类 - 16,但我希望它在API级别为15的设备上运行时没有错误.
让我们举几个例子.一个新类:Android.widget.Advanceable和一个新的/重命名的方法View.setBackground()::
我可以这样做:
Advanceable myAdvanceable = ...;
if (android.os.Build.VERSION.SDK_INT >= 16)
{
myView.setBackground(...);
myAdvanceable.advance();
}
else
{
myView.setBackgroundDrawable(...); // The old function name.
// Don't bother advancing advanceables.
}
Run Code Online (Sandbox Code Playgroud)
如果我将minSdk设置为15但构建目标为16(即在Project Properties-> Android中),它实际上将编译而没有错误.至少在某些时候.Eclipse对于错误有点随机,并且有时会说"setBackground()仅在API级别> = 16"或类似的情况下可用,但如果我只是清理项目那些错误就会神奇地消失.
所以我的问题是,我被允许这样做吗?如果我在API级别15设备上运行代码,代码是否会崩溃?如果真的到达16代码,它会崩溃吗?Eclipse为什么不阻止我构建它?
谢谢你的答案,我想问题应该是:为什么lint不会警告我使用新的API?
我在我的清单中有这个,并且我正在使用API级别16的功能,但它仍然没有警告我:
<uses-sdk android:minSdkVersion="15"
android:targetSdkVersion="16"/>
Run Code Online (Sandbox Code Playgroud)
此外,我仍然不确定整个类何时是API级别的新手,例如Advanceable.具体来说,如果我将它们用作成员变量.
答案结果证明是"Eclipse是错误的地狱",但Nico的回答也非常有帮助.
根据BOL(SQL Server Books Online)sp_dbcmptlevel,
将在Microsoft SQL Server的未来版本中删除此功能.请勿在新的开发工作中使用此功能,并尽快修改当前使用此功能的应用程序.请改用ALTER DATABASE兼容级别.
现在,我知道检查数据库兼容性的唯一TSQL方式是通过sp_dbcmptlevel.据我所知,ALTER DATABASE Compatibility Level仅用于设置兼容级别,而不是获取信息.
如何在不使用GUI的情况下获得兼容级别?
我正在维护为PHP 5.2编写的库,我想创建它的PHP 5.3命名空间版本.但是,我还会保留非命名空间版本,直到PHP 5.3变得如此陈旧,即使是Debian stable也可以发布它;)
我有相当干净的代码,大约80个类遵循Project_Directory_Filename命名方案(我\Project\Directory\Filename当然会改变它们)和只有少数函数和常量(也以项目名称为前缀).
问题是:并行开发命名空间和非命名空间版本的最佳方法是什么?
我应该只在存储库中创建fork并继续在分支之间合并更改吗?是否存在反斜杠代码难以合并的情况?
我应该编写将5.2版本转换为5.3版本的脚本,反之亦然吗?我应该使用PHP tokenizer吗?sed?C预处理器?
有没有更好的方法在可用的地方使用命名空间并保持与旧PHP的向后兼容性?
更新:毕竟决定不使用命名空间.
compatibility ×10
android ×2
sql-server ×2
angular ×1
angular-cli ×1
api ×1
bytecode ×1
deprecated ×1
gradle ×1
ios ×1
ios4 ×1
iphone ×1
java ×1
migration ×1
namespaces ×1
php ×1
polyfills ×1
sql ×1
swift ×1
t-sql ×1
xcode ×1