知识点总结(一)

这一周,总的来说没有用到什么新东西,有一些之前没有遇到过的,这里记录下来,方便自己整理自己的知识体系!

  1. 修改自定义ActionSheetDialog
  2. 设置自定义Actionbar
  3. 自定义字体大小颜色
  4. Java文件配置Properties的用法

    这里,关于自定义ActionSheetDialog只是最近有项目用到,于是自己做了一些扩展。在扩展的过程中,走的弯路是因为之前给每一个选项的背景增加了selected背景的设置,而在扩展的过程中需要对整个背景设置为统一的黑色,因为selected的背景色是子View,而我对Dialog的整个ViewGroup的主题、背景都设置了却依然不管用。后来才一步一步检查才发现原来这里有个背景色。如果今后有用不到的项目,可以在这个基础上回复为动态修改背景色。
    最后实现的效果如图:
    这里写图片描述

    代码: http://blog.csdn.net/vicent_9920/article/details/53379545
    图片:自己找

    第二点,关于ActionBar的设置。目前就算toolBar也是支持ActionBar的用法的。我这里只是将ActionBar的标题隐藏,然后修改了右上角的图片,没有什么技术含量,但是自己之前没有用过,所以自己做个笔记:

      //获取ActionBar
        ActionBar actionBar = getSupportActionBar();
        //左上角图标显示
        actionBar.setDisplayHomeAsUpEnabled(true);
        //ActionBar标题隐藏
        actionBar.setDisplayShowTitleEnabled(false);
        //设置左上角图标
        actionBar.setHomeAsUpIndicator(R.drawable.show_image_close);

同样需要菜单监听事件:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId()==android.R.id.home){
            this.finish();
        }
        return super.onOptionsItemSelected(item);
    }

效果跟上图几乎一致:
这里写图片描述

第三点,需要讲的就是上图中的页码效果。代码比较简单,这里直接上代码:

 vpImageBrowser.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {


                    //当前的页码
                    int index = arg0 % size;
//文本
                    SpannableStringBuilder ssb = new SpannableStringBuilder();
                    ssb.append((index + 1) +" /" + size);
                    //需要修改的终点
                    int end = (index+1<10) ? 1:2;
                    //需要修改的起点
                    int start = (end==1)?0:1;
                    //修改后的颜色
                    ColorStateList colorStateList = ColorStateList.valueOf(getResources().getColor(R.color.white));
                    //可设置文本颜色,大小,样式和字体以匹配TextAppearance资源的样式。
                    TextAppearanceSpan tas = new TextAppearanceSpan("default", android.graphics.Typeface.NORMAL,  sp2px(36), colorStateList, null );
                    //为文本设置样式
                    ssb.setSpan(tas,start,end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                    //设置文本
                    tvImageIndex.setText(ssb);

            }
            public int sp2px(float spValue) {
                final float fontScale = getResources().getDisplayMetrics().scaledDensity;
                return (int) (spValue * fontScale + 0.5f);
            }



        });

具体的更酷炫效果可以见这里
最后一点,关于Properties也是我第一次遇到,然后觉得这个比较专业,于是就记下来,今后说不定什么时候用得上!
首先,Properties这个类主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置。像Python支持的配置文件是.ini文件,同样,它也有自己读取配置文件的类ConfigParse,方便程序员或用户通过该类的方法来修改.ini配置文件。在Java中,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”的格式,文本注释信息可以用”#”来注释。
先来看看我项目中asets文件夹下的configuration.properties

#WebType AnHui 0 SiChuan 1 
#http://sc.301**.org/pc/WebService/
#http://192.1**.1**.111:114/
WebService=http://sc.****0.org/pc/WebService/
DebugService=http://sc.3****.org/pc/WebService/
UpDateApk=http://sc.****0.org/pc/SurveyWeb/AppFile/update.json
WebType=1

比较简单的是当我们打开Apk的时候需要检查apk是否为最新版本,于是获取版本号,然后通过UpDateApk对应的路径去获取最新的版本号以及描述信息、apk下载路径等等。我们看看访问这个路径能拿到什么信息?

{
    "version":201607290,
    "url":"http://***.30120.org/pc/SurveyWeb/AppFile/PuCha2.0.apk",
    "features":["更新优化"]
}

上面的内容有版本号、apk下载路径、更新的理由。当我们对比APK版本号以后,然后决定是否要更新。

获取版本号代码:

private int getVersionCode(Context context) {
        int versionCode = 0;
        try {
            versionCode = context.getPackageManager().getPackageInfo(
                    mPackageName, 0).versionCode;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
        return versionCode;
    }

获取配置信息中apk的路径:

public static String get(String key, Context pContext) {
        Properties p = new Properties();
        try {
            InputStream in = pContext.getResources().getAssets()
                    .open("configuration.properties");
            p.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return p.getProperty(key);
    }


//调用该方法:
URLUtility.get("UpDateApk", this)

对比版本号,根据描述更新原因,引导客户升级

/**
     * 检查是否需要升级
     * @param updateDescribeFileUrl APK信息路径
     * @param downLoadPath 更新APK的下载路径
     */
    public void checkUpdate(String updateDescribeFileUrl, String downLoadPath) {
        mDownLoadPath = downLoadPath;
        HttpUtil.connServerForResult(updateDescribeFileUrl,
                new DownloadMemaryClient() {
                    @Override
                    public void onFinish() {
                        JSONObject j;
                        try {
                            String json = new String(super.mOutputStream
                                    .toByteArray());
                            j = new JSONObject(json);
                            //获取现在的版本号
                            int versionCode = getVersionCode(mContext);
                            //最新的APK版本号
                            int vn = j.getInt("version");
                            if (vn > versionCode) {
                                String apkUrl = j.getString("url");
                                JSONArray ja = j.getJSONArray("features");
                                String[] features = null;
                                if (ja != null && ja.length() > 0) {
                                    features = new String[ja.length()];
                                    for (int i = 0; i < ja.length(); ++i)
                                        features[i] = ja.getString(i);
                                }
                                //提示更新原因,引导客户选择更新
                                showNoticeDialog(apkUrl, features);
                            }
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                            super.onException(e.getMessage());
                        }
                    }
                });
    }

安装APK方法:

/**
     * 安装apk
     * @param mSavePath APK文件下载路径
     * @param fileName  APK文件名称
     */
    private void installApk(String mSavePath, String fileName) {
        File apkfile = new File(mSavePath, fileName);
        if (!apkfile.exists()) {
            return;
        }
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.setDataAndType(Uri.parse("file://" + apkfile.toString()),
                "application/vnd.android.package-archive");
        mContext.startActivity(i);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值