我即将创建我的第一个Android 原生(因此不是基于浏览器的)应用程序,并寻找有关图标创建/配置的一些好的做法.由于它应该支持多个设备/分辨率,我认为最好使用SVG来创建它们.至少有这个lib:http://code.google.com/p/svg-android/承诺在Android上提供对SVG的支持.
到目前为止,我还没有找到描述这个或另一个库的使用的资源作为在设备上呈现SVG图标的方法,所以我有点不愿意使用它.到目前为止,我所看到的最好的是使用SVG作为在不同分辨率下预渲染基于png的图标的源格式.
所以我的问题是:SVG图标是一个很好的选择,可以直接在设备上使用而无需png预渲染步骤(它是否可以工作),如果,为什么似乎没有人使用这种方法?
在以下场景中,什么是最佳/良好的服务绑定/通信实践(我希望标题有点意义):
包括若干服务方法的业务层(BL),所述服务方法共享(作为公共通信端点)异步套接字服务(SS),其可以由那些方法绑定并用于套接字IO.
例如,BL抓住SL并调用send(消息),然后等待响应.
我首先使用了回调和绑定模式.由于我在使用绑定模式的清晰设计方面遇到了一些问题(缺少消息队列以及在主线程中完成的所有操作),我现在正在尝试使用消息模式.
基本上,BL服务和SL服务现在都有一个Messenger和一个相应的处理程序:
private final IncomingHandler incomingHandler = new IncomingHandler();
private final Messenger messengerReceiver = new Messenger(incomingHandler);
private class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
其中一个BL是AbstractAccountAuthenticator实现的子类
addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options){
...
if(socketConnectionState != null){
Bundle authBundle = new Bundle();
authBundle.putString("password", password);
authBundle.putString("username", account.name);
Message message = Message.obtain(null, SocketConnectionHandler.SEND_REQUEST, authBundle);
message.replyTo = messengerReceiver;
socketConnectionState.getMessenger().send(message);
...}
Run Code Online (Sandbox Code Playgroud)
它也使用SL来获取authToken.addAccount()方法要么在Bundle中立即返回结果(authToken),要么调用响应回调方法.现在如果我通过SL在addAccount中请求auth令牌,我将如何处理以传回结果?
这里的主要问题是结果不会返回给调用方法(addAccount()),而是返回给messengerReceiver处理程序.
我能想到的唯一方法是BlockingQueue,它由消息处理程序提供响应,然后在addAccount()方法中获取,但这真的让人觉得不可思议.其他想法?正确的做法?
我有办法在Groovy中对"$ -Strings"进行嵌套评估,例如
def obj = {["name":"Whatever", "street":"ABC-Street", "zip":"22222"]}
def fieldNames = ["name", "street", "zip"]
fieldNames.each{ fieldname ->
def result = " ${{->"obj.${fieldname}"}}" //can't figure out how this should look like
println("Gimme the value "+result);
}
Run Code Online (Sandbox Code Playgroud)
结果应该是:
Gimme the value Whatever
Gimme the value ABC-Street
Gimme the value 22222
Run Code Online (Sandbox Code Playgroud)
我试图解决这个问题要么没有给出正确的结果(例如只是obj.street),要么根本不会编译.到目前为止,我根本就没有理解整个概念.但是,看到这个:http:// groovy.codehaus.org/Strings+and+GString我相信它应该是可能的.
我使用九个补丁图像作为选择器项目元素的drawable.九个补丁图像在这里:

最终渲染的图像是这个(模拟器和设备截图,两个设备都有分辨率> mdpi):

正如您所看到的,它已经在可伸展区域之外缩放(如9补丁文件中所定义),较暗的绿色条纹应该更厚.为什么这样,可以避免吗?draw9patch工具正确缩放此图像.是否与Android试图在高分辨率设备上保留物理尺寸有关?