ここでセントラルリポジトリ内の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文字と認識されてしまいます。