当前位置:  编程技术>移动开发
本页文章导读:
    ▪Multiple annotations found at this line        Multiple annotations found at this line: 坑爹的百分号啊。 今天leader拉了一个分支项目,我从SVN取下来后,就一直全红,还以为谁把错误的classpath传上去了呢,后来一看,R文件死活不重新生成。从cons.........
    ▪ 出世作->炫彩屏保.欢迎体验        处女作------->炫彩屏保.......欢迎体验   炫彩屏保是Android系统中的屏幕保护程序,它可以在您不需要观看屏幕的时候呈现不同的炫彩图片,既美观又大方,在让系统省电同时还可以保护您的隐私.........
    ▪ DatePickerDialog 批改,只显示月日,隐藏年       DatePickerDialog 修改,只显示月日,隐藏年 需求要只显示月和日的日历控件,又不想自定义控件,最简单的办法就是隐藏显示年的这个框了,但DatePickerDialog并没有直接提供方法来操作,这里分.........

[1]Multiple annotations found at this line
    来源: 互联网  发布时间: 2014-02-18
Multiple annotations found at this line:

坑爹的百分号啊。

今天leader拉了一个分支项目,我从SVN取下来后,就一直全红,还以为谁把错误的classpath传上去了呢,后来一看,R文件死活不重新生成。从console中看出,报了一个下面的错

Multiple annotations found at this line:
    - error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false"      attribute?
   

 

上网一查发现(转):

 

反复检查后发现是string.xml中的 %  导致编译失败,

去Google的Android开发者讨论组查看关于这个问题的讨论  后看到了Xavier Ducrohet大神的回复,说这是由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android最新的开发文档的描述String的部分,已经说明了  如何去设置 %s 等符号,下面是文档片段:

If you need to format your strings using String.format(String, Object...) , then you can do so by putting your format arguments in the string resource. For example, with the following resource:

如果你需要使用 String.format(String, Object...) 来格式化你的字符串,你可以把格式化参数放在你的字符串中,参见下面的例子:

 

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

In this example, the format string has two arguments: %1$s is a string and %2$d is a decimal number. You can format the string with arguements from your application like this:

在这个例子中,这个格式化的字符串有2个参数, %1$s是个字符串 %2$d 是个浮点数,你可以在你的程序中按照下面的方法来根据参数来格式化字符串:

Resources res = getResources();

String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

那么根据例子上说的我需要把%s换成%1$s才行了,修改后编译通过,程序成功启动。

问题补充:

有读者问如何在<string></string>中使用%号

有两个办法可供选择

  1.用%%来表示1个%,和转意符号 \ 的用法相同
 
  2.如果你的字符串不需要格 式化,可以在你的<string 标签上增加一个属性:formatted="false"例如 <string name="test" formatted="false">% test %</string> 即可

    
[2] 出世作->炫彩屏保.欢迎体验
    来源: 互联网  发布时间: 2014-02-18
处女作------->炫彩屏保.......欢迎体验

 

炫彩屏保是Android系统中的屏幕保护程序,它可以在您不需要观看屏幕的时候呈现不同的炫彩图片,既美观又大方,在让系统省电同时还可以保护您的隐私.


    
[3] DatePickerDialog 批改,只显示月日,隐藏年
    来源: 互联网  发布时间: 2014-02-18
DatePickerDialog 修改,只显示月日,隐藏年
需求要只显示月和日的日历控件,又不想自定义控件,最简单的办法就是隐藏显示年的这个框了,但DatePickerDialog并没有直接提供方法来操作,这里分享一个笨办法:)

效果图:

默认


处理后


代码片段1
/**
     * 从当前Dialog中查找DatePicker子控件
     * 
     * @param group
     * @return
     */
    private DatePicker findDatePicker(ViewGroup group) {
        if (group != null) {
            for (int i = 0, j = group.getChildCount(); i < j; i++) {
                View child = group.getChildAt(i);
                if (child instanceof DatePicker) {
                    return (DatePicker) child;
                } else if (child instanceof ViewGroup) {
                    DatePicker result = findDatePicker((ViewGroup) child);
                    if (result != null)
                        return result;
                }
            }
        }
        return null;

    } 


代码说明:
        通过断点也看到Dialog的ContentView里有DatePicker子控件,这里通过遍历的办法来查找这个控件。


使用代码
final Calendar cal = Calendar.getInstance();
        mDialog = new CustomerDatePickerDialog(getContext(), this,
            cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
            cal.get(Calendar.DAY_OF_MONTH));
        mDialog.show();
        
        DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView());
        if (dp != null) {
            ((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);

        } 


代码说明:

        通过源码可以看得到DatePicker内置三个NumberPicker控件,依次表示年、月、日,隐藏掉第一个即可。


补充
后续使用中发现标题栏也要改,通过查看DatePickerDialog源码,需要自定义并实现onDateChanged方法才可实现,如下代码:
class CustomerDatePickerDialog extends DatePickerDialog {

        public CustomerDatePickerDialog(Context context,
                OnDateSetListener callBack, int year, int monthOfYear,
                int dayOfMonth) {
            super(context, callBack, year, monthOfYear, dayOfMonth);
        }

        @Override
        public void onDateChanged(DatePicker view, int year, int month, int day) {
            super.onDateChanged(view, year, month, day);
            mDialog.setTitle((month + 1) + "月" + day + "日");
        }
    }
1 楼 liuxian13183 2012-02-14  
能不能把详细的代码或者demo发一下,jackie.new@163.com 谢谢!

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
网络技术 iis7站长之家
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3