我想为我的应用程序提供2个可选主题.为了做到这一点,我定义了一些属性,如下所示:
<attr format="color" name="item_background" />
Run Code Online (Sandbox Code Playgroud)
然后,我创建了两个主题,如下所示:
<style name="ThemeA">
<item name="item_background">#123456</item>
</style>
<style name="ThemeB">
<item name="item_background">#ABCDEF</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这种方法效果很好,允许我轻松地创建和修改几个主题.问题是它似乎只能在Views中使用,而不能在Drawables中使用.
例如,引用布局内View的值可以:
<TextView android:background="?item_background" />
Run Code Online (Sandbox Code Playgroud)
但是在Drawable中做同样的事情并不是:
<shape android:shape="rectangle">
<solid android:color="?item_background" />
</shape>
Run Code Online (Sandbox Code Playgroud)
运行应用程序时出现此错误:
java.lang.UnsupportedOperationException: Can't convert to color: type=0x2
Run Code Online (Sandbox Code Playgroud)
如果不是?item_background我使用硬编码颜色,它可以工作,但这不允许我使用我的主题.我也试过?attr:item_background,但同样的事情发生了.
我怎么能这样做?为什么它在Views中有效但在Drawables中无效?我在文档中的任何地方都找不到这个限制......
可能重复:
在ProGuard优化期间删除未使用的字符串
我有一个包含许多日志语句的Android应用程序.我希望它们不会出现在发布版本中,所以我在proguard.cfg文件中使用了Proguard这样的东西:
-assumenosideeffects class android.util.Log {
public static *** d(...);
}
Run Code Online (Sandbox Code Playgroud)
但问题是有很多Log.d("something is " + something),虽然Log.d()语句正在从字节码中删除,但字符串仍然存在.
所以,按照这个答案,我创建了一个简单的包装类,类似于:
public class MyLogger {
public static void d(Object... msgs) {
StringBuilder log = new StringBuilder();
for(Object msg : msgs) {
log.append(msg.toString());
}
Log.d(TAG, log.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
然后我编辑了我proguard.cfg:
-assumenosideeffects class my.package.MyLogger {
public static *** d(...);
}
Run Code Online (Sandbox Code Playgroud)
但是仍然可以在生成的字节码中找到字符串!
除此之外,我使用的proguard.cfg是Android SDK提供的标准.难道我做错了什么?
编辑:在检查生成的字节码之后,我看到字符串在那里,但它们并没有像我想的那样相互追加.它们存储在一个数组中.为什么?将它们作为变量参数传递给我的方法.看起来ProGuard不喜欢这样,所以我修改了我的记录器类,如下所示:
public static void d(Object a) …Run Code Online (Sandbox Code Playgroud) 我的应用程序分为子包,仅供个人组织使用:
com.myname.myapp
|
`- com.myname.myapp.activities
|
`- com.myname.myapp.whatever
|
`- ...
Run Code Online (Sandbox Code Playgroud)
问题是生成的R.java位于,com.myname.myapp因此当我R.id.something从子包中键入一个类时com.myname.myapp.activities,我得到R cannot be resolved to a variable(显然我猜).
当我点击整理导入(Ctrl + Shift + O)时,Eclipse修复它import com.myname.myapp.R在顶部添加,一切似乎都完美.但另一方面,Android文档说明了这一点:
Eclipse有时喜欢在使用资源的文件顶部添加导入android.R语句,尤其是当您要求eclipse对排序或以其他方式管理导入时.这会导致你的品牌破产.注意这些错误的import语句并删除它们
知道一切都很完美,我该怎么办?
#something {
background: url(data:image/png;base64,ABCDEF);
}
Run Code Online (Sandbox Code Playgroud)
此代码段适用于所有支持数据URI的浏览器(显然不包含ABCDEF).
此外,根据CSS 2.1规范,它是有效的:
... 可选的单引号(')或双引号(")字符后跟URI本身......
但验证者不会在没有引号的情况下接受它:
值错误:后台URL(数据:image/png; base64,ABCDEF)是一个不正确的URL
如果您使用单引号或双引号括起URI,则会进行验证.
我错过了什么吗?它是验证器中的错误吗?编辑:它是!
编辑:我把这段代码放在jsbin:http://jsbin.com/eneru
我试图让用户使用jQuery调整(仅垂直)DIV元素.我读了关于jQuery UI的文章,我试过了,几分钟后,我就开始了.但是这个库增加了~25KB的开销,我想避免,因为我只想要简单的垂直大小调整.
所以我试着自己做.这是HTML,我使用内联样式清晰:
<div id="frame" style="border: 1px solid green; height: 350px">
<div style="height: 100%">Lorem ipsum blah blah</div>
<span id="frame-grip" style="display: block; width: 100%; height: 16px; background: gray"></span>
</div>
Run Code Online (Sandbox Code Playgroud)
如您所见,DIV元素下方有一个小条,因此用户可以向上或向下拖动它以调整DIV的大小.这是Javascript代码(使用jQuery):
$(document).ready(function(){
var resizing = false;
var frame = $("#frame");
var origHeightFrame = frame.height();
var origPosYGrip = $("#frame-grip").offset().top;
var gripHeight = $("#frame-grip").height();
$("#frame-grip").mouseup(function(e) {
resizing = false;
});
$("#frame-grip").mousedown(function(e) {
resizing = true;
});
$("#frame-grip").mousemove(function(e) {
if(resizing) {
frame.height(e.pageY - origPosYGrip + origHeightFrame - gripHeight/2);
}
});
}); …Run Code Online (Sandbox Code Playgroud) 让我假装我的wiki中有这些页面标题(MediaWiki 1.19.4):
SOMETHIng
Sómethìng
SomêthÏng
SÒmetHínG
Run Code Online (Sandbox Code Playgroud)
如果用户搜索something我想要返回所有4个页面作为结果.
目前,我唯一能想到的就是这个查询(MySQL Percona 5.5.30-30.2):
SELECT page_title
FROM page
WHERE page_title LIKE '%something%' COLLATE utf8_general_ci
Run Code Online (Sandbox Code Playgroud)
哪个只返回SOMETHIng.
我必须走正确的道路,因为如果我搜索sóméthíngOR SÓMÉTHÍNG,我会得到SOMETHIng结果.我怎样才能修改查询,以便按预期获得其他结果?由于该page表仅包含~2K行,因此性能并不重要.
这是具有相关位的表定义:
CREATE TABLE page (
(...)
page_title VARCHAR(255) NOT NULL DEFAULT '' COLLATE latin1_bin,
(...)
UNIQUE INDEX name_title (page_namespace, page_title),
)
Run Code Online (Sandbox Code Playgroud)
不能修改表定义,因为这是MediaWiki和AFAIK的库存安装,其代码期望以这种方式定义该字段(即unicode存储为二进制数据).
我已经为我的网站成功实现了HTML5推送通知,用于新闻更新和用户事件。如果某个端点不再有效(无论出于何种原因,但通常是由于用户在其浏览器中撤消了权限),则当我尝试发送通知时,我会从推送服务器获得404或410状态。然后,从记录中删除该端点。
但是我想要更加主动一些,并检查端点是否有效,因此我的已订阅用户统计信息更为真实,并且仅在通知发送失败(可能需要几天或几周)时才更新。
我曾想发送无效的推送消息(例如,使用错误的VAPID密钥),但我无法保证服务器会在有效负载有效之前检查端点的有效性,因此即使可行,它也可能会中断在任何时候。
有什么更优雅的方式可以做到这一点吗?
在Play中创建模型时!2.x,你可以使用@Constraints.Required和@Formats.NonEmpty.据我所知,它们是相同的,但ZenTasks样本在同一领域使用它们,所以我可能错了.但为什么?
public class User extends Model {
@Id
@Constraints.Required
@Formats.NonEmpty
public String email;
...
}
Run Code Online (Sandbox Code Playgroud)