小编MM.*_*MM.的帖子

如何从drawable引用样式属性?

我想为我的应用程序提供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中无效?我在文档中的任何地方都找不到这个限制......

android android-theme android-drawable android-attributes

87
推荐指数
4
解决办法
3万
查看次数

使用ProGuard删除日志记录不会删除记录的字符串

可能重复:
在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)

android proguard

20
推荐指数
2
解决办法
8935
查看次数

从不同的包访问R.java

我的应用程序分为子包,仅供个人组织使用:

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语句并删除它们

知道一切都很完美,我该怎么办?

java eclipse sdk android

14
推荐指数
2
解决办法
1万
查看次数

CSS中的非引用数据URI是否有效?

#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,则会进行验证.

我错过了什么吗?它是验证器中的错误吗?编辑:它是!

css w3c-validation data-uri

10
推荐指数
1
解决办法
1809
查看次数

如何只使用jQuery垂直调整DIV大小 - 没有插件?

编辑:我把这段代码放在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)

javascript jquery resize

6
推荐指数
2
解决办法
1万
查看次数

如何在MediaWiki数据库中进行重音和不区分大小写的搜索?

让我假装我的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存储为二进制数据).

mysql mediawiki

5
推荐指数
1
解决办法
1201
查看次数

如何检查推送端点是否仍然有效?

我已经为我的网站成功实现了HTML5推送通知,用于新闻更新和用户事件。如果某个端点不再有效(无论出于何种原因,但通常是由于用户在其浏览器中撤消了权限),则当我尝试发送通知时,我会从推送服务器获得404或410状态。然后,从记录中删除该端点。

但是我想要更加主动一些,并检查端点是否有效,因此我的已订阅用户统计信息更为真实,并且仅在通知发送失败(可能需要几天或几周)时才更新。

我曾想发送无效的推送消息(例如,使用错误的VAPID密钥),但我无法保证服务器会在有效负载有效之前检查端点的有效性,因此即使可行,它也可能会中断在任何时候。

有什么更优雅的方式可以做到这一点吗?

web-push push-api

5
推荐指数
0
解决办法
564
查看次数

@ Constraints.Required和@Formats.NonEmpty之间有什么区别?

在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)

playframework playframework-2.0

2
推荐指数
1
解决办法
2127
查看次数