ここでセントラルリポジトリ内のFacebookSDKの最新バージョンをチェックする。
build.gradleに下記を追加
repositories { … mavenCentral() … } dependencies { … compile 'com.facebook.android:facebook-android-sdk:3.23.1' … }
repositories { … mavenCentral() … } dependencies { … compile 'com.facebook.android:facebook-android-sdk:3.23.1' … }
final int MAX_TEXT_LENGTH = 10; final EditText editText = (EditText) findViewById(R.id.edit_text); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if (unfixInput(s)) { return; } final String str = s.toString(); final String adjustedText = adjustText(str); if (!str.equals(adjustedText)) { editText.setText(adjustedText); editText.setSelection(editText.getText().length()); Toast.makeText(getApplicationContext(), String.format("最大%d文字です", MAX_TEXT_LENGTH), Toast.LENGTH_SHORT).show(); return; } // TODO 内容保存処理 } /** * 入力確定前の文字があるときtrue */ private boolean unfixInput(final Editable s) { Object[] spanned = s.getSpans(0, s.length(), Object.class); if (spanned != null) { for (Object obj : spanned) { if ((s.getSpanFlags(obj) & Spanned.SPAN_COMPOSING) == Spanned.SPAN_COMPOSING) { return true; } } } return false; } /** * 文字列の調整 */ private String adjustText(final String str) { if (MAX_TEXT_LENGTH < str.codePointCount(0, str.length())) { // 文字数は、コードポイントで比較 return adjustText(str.substring(0, (str.length() - 1))); } return str; } });
android:maxLength="10"と設定しても、 文字数のカウントがサロゲートの文字が配慮されておらず、絵文字など、文字コードがサロゲートの場合、1文字で2文字と認識されてしまいます。