android判斷手機是否支持某種語言

在做app多語言的時候,遇到手機不支持某種語言時,顯示空白,或方框裏面打叉。

原因是手機系統的字體庫不支持該種語言。

解決思路:去檢測手機系統是否支持,不支持時,不顯示該種語言設置選擇。

方法:例如旁遮普語,語言碼是pa,定義兩個不同的旁遮普語字符串,將兩個字符串分別寫到兩個大小相同的bitmap,再去比較兩個bitmap每個像素值是否相同,相同表示不支持,不相同表示支持。因爲不支持時,顯示空白或連續的方框內打叉,所以像素點相同。

注:

1、字符串不能有空格,符號等語言無關的字符

2、爲了保證方框亂碼時亂碼一樣,圖片寬度要比字符串長度短。

String str1 = "ਕਿਰਪਾਕਰਕੇਆਪਣਾਫੋਨਨੰਬਰਦਰਜ਼ਕਰੋ";
String str2 = "ਫੋਨਨੰਬਰਨੂੰਸਾਈਨਅੱਪਕੀਤਾਗਿਆਹੈਤੁਸੀਂ";

   /**
     * 判斷本機是否支持某語言
     * 將兩個字符串寫入bitmap,再比較兩個bitmap是否相同
     * 支持該語言時,字符串不同,像素值也不同
     * 不支持時,顯示空白或亂碼(☐☐☐☐☐或方框內打叉),像素值相同
     *
     * 參數不能有空格、符號、數字等其他語言通用的字符
     * @param str1 某語言一段字符串
     * @param str2 某語言一段字符串,與str1不同
     */
    public static boolean isSupportLanguage(String str1, String str2){
        Paint newPaint = new Paint();
        int len1 = (int)newPaint.measureText(str1);
        int len2 = (int)newPaint.measureText(str2);
        int minLen = len1 < len2 ? len1 : len2;
        if(0 >= minLen){
            Log.d(TAG,"The String used for comparison is null!");
            return false;
        }
        Bitmap bitmap1 = Bitmap.createBitmap(minLen,minLen, Bitmap.Config.ARGB_8888);
        Bitmap bitmap2 = Bitmap.createBitmap(minLen,minLen, Bitmap.Config.ARGB_8888);
        Canvas bitmap1Canvas = new Canvas(bitmap1);
        Canvas bitmap2Canvas = new Canvas(bitmap2);
        bitmap1Canvas.drawColor(Color.GRAY);
        bitmap2Canvas.drawColor(Color.GRAY);
        Paint mPaint = new Paint();
        mPaint.setColor(Color.RED);
        mPaint.setStrokeWidth(1);
        bitmap1Canvas.drawText(str1,0,minLen/2,mPaint);
        bitmap2Canvas.drawText(str2,0,minLen/2,mPaint);
        return !bitmap1.sameAs(bitmap2);
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章