修正andriodソース計算機——EditText、テキストボックス、入力ボックス最大入力数ヒント


1.Androidソース計算機:一定数を入力し、乗数を減算すると、エラーが発生しやすい.
2.計算機の数字入力ボックスに、最大入力数を制限してヒントを与えたい.
この問題は本来、以下の方法で軽く解決できるが、レイアウトはCalculatorDisplay、そのextendsはViewSwitcherであり、lengthFilterではパラメータ:EditText、すなわち入力ボックスを使用する必要がある.Androidソース計算機に詳しくないため、計算機入力ボックスの取得方法がわからず、CalculatorDisplayのgetChildAt(1)で取得できることが分かった.onCreateでは、lengthFilter(this、(EditText)mDisplayなどのlengthFilterメソッドが呼び出されます.getChildAt(1),50,getResources().getString(R.string.most_char));解決できる
 
  3.ヒント:EditText、テキストボックス、入力ボックスの最大入力数のヒントは、このメソッドを呼び出すことができます.
public static void lengthFilter(final Context context, final EditText editText, final int max_length, final String err_msg) {

    	InputFilter[] filters = new InputFilter[1];

    	filters[0] = new InputFilter.LengthFilter(max_length) {

			@Override
			public CharSequence filter(CharSequence source, int start, int end,
					Spanned dest, int dstart, int dend) {
				// TODO Auto-generated method stub
				
		    	int destLen = getCharacterNum(dest.toString()); //      (     2   )
		    	int sourceLen =  getCharacterNum(source.toString()); 
		    	if (destLen + sourceLen > max_length) {
		    	Toast.makeText(context, err_msg,Toast.LENGTH_SHORT).show();
		    	return "";
		    	}
		    	return source;
				
			}

    	};
    	
    	editText.setFilters(filters);

    	}
    
	    /**
	     * @description             (     ,     2   )
	     * @param content
	     * @return
	     */
	    public static int getCharacterNum(final String content) {
	    if (null == content || "".equals(content)) {
	    return 0;
	    }else {
	    return (content.length() + getChineseNum(content));
	    }
	    }
	
	
	
	
	    /**
	    * @description                   
	    * @param s 
	    * @return
	    */
	    public static int getChineseNum(String s) {
	
	    int num = 0;
	    char[] myChar = s.toCharArray();
	    for (int i = 0; i < myChar.length; i++) {
	    if ((char)(byte)myChar[i] != myChar[i]) {
	    num++;
	    }
	    }
	    return num;
	    }