知識點總結(一)

這一週,總的來說沒有用到什麼新東西,有一些之前沒有遇到過的,這裏記錄下來,方便自己整理自己的知識體系!

  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);
    }
發佈了61 篇原創文章 · 獲贊 28 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章