AndroidユーザーインタフェースUIコンポーネント--TextViewとそのサブクラス(3)EditViewおよび各種Span文字スタイルの説明


EditViewとTextViewの使い方の差は多くなく、文字だけ編集可能
テクニック:
EditText非表示キーボードsetInputType(0)を設定します. 
EditTextが入力方式でgetWindow()を隠すように設定.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
プロンプト・エラー・ボックス(必須の検証など):
setError();
テキストをすべて選択:
selectAll()
プロンプトの色の設定
setHintTextColor()
補足:
XML属性
android:drawableBottom
画像などのdrawableをtextの下に出力します.色を指定するとtextの背景がその色に設定され、backgroundと使用すると後者が上書きされます.  
android:drawableLeft
画像などのdrawableをtextの左側に出力します. 
android:drawablePadding
textとdrawable(ピクチャ)の間隔を設定し、drawableLeft、drawableRight、drawableTop、drawableBottomとともに使用します.負の数に設定できますが、単独で使用しても効果はありません. 
android:drawableRight    
textの右側にdrawableを出力します.  
android:drawableTop    
textの真上にdrawableを出力します. 
android:lineSpacingExtra    
行間隔を設定します. 
テキストの内容にコードにさまざまな効果を加える場合はSpannablesStringを使用します.
AndroidシステムはSpannablesStringクラスを通じて指定されたテキストを処理します.具体的には以下の機能があります.
1、BackgroundColorSpan背景色
SpannableString spanText = new SpannableString("    ");
spanText.setSpan(new BackgroundColorSpan(Color.GREEN), 0, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

2、ClickableSpanテキストはクリック可能で、クリックイベントがある
TextView tv = findViewById(R.id.tv_click);
SpannableString spStr = new SpannableString("     ");
ClickSpan clickSpan = new NoLineClickSpan(vo); //     
spStr.setSpan(clickSpan, 0, str.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
tv.append(spStr);
tv.setMovementMethod(LinkMovementMethod.getInstance());
//           
tv.setMovementMethod(LinkMovementMethod.getInstance());

3、ForegroundColorSpanテキストカラー(前景色)
spanText = new SpannableString("    ");
spanText.setSpan(new ForegroundColorSpan(Color.BLUE), 6, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

4、MaskFilterSpan修飾効果、例えばBlurMaskFilter、エンボス(EmbossMaskFilter)
spanText = new SpannableString("MaskFilterSpan ");
int length = spanText.length();
//  (BlurMaskFilter)
MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(3, Blur.OUTER));
spanText.setSpan(maskFilterSpan, 0, length - 10, Spannable.
SPAN_INCLUSIVE_EXCLUSIVE);
//  (EmbossMaskFilter)
maskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3));
spanText.setSpan(maskFilterSpan, length - 10, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

5、MetricAffectingSpan親、一般的に使わない
6、RasterizerSpan格子効果
spanText = new SpannableString("StrikethroughSpan");
spanText.setSpan(new StrikethroughSpan(), 0, 7, Spannable.
SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

7、StrikethroughSpan削除線(中線)
spanText = new SpannableString("StrikethroughSpan");
spanText.setSpan(new StrikethroughSpan(), 0, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

8、SuggestionSpanはプレースホルダに相当し、一般的にEditText入力ボックスで使用される.このテキストをダブルクリックすると、プロンプトボックスが表示され、推奨(推奨)テキストが選択され、選択したテキストがプレースホルダに置き換えられます.入力方式で使われることが多い.
9、UnderlineSpan下線
spanText = new SpannableString("UnderlineSpan");
spanText.setSpan(new UnderlineSpan(), 0, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

10、AbsoluteSizeSpan絶対サイズ(テキストフォント)
spanText = new SpannableString("AbsoluteSizeSpan");
spanText.setSpan(new AbsoluteSizeSpan(20, true), 0, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

11、DynamicDrawableSpanは、テキストベースラインまたは下部に基づいて画像を設定します.
DynamicDrawableSpan drawableSpan =
 new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {
    @Override
    public Drawable getDrawable() {
        Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
        d.setBounds(0, 0, 50, 50);
        return d;
    }
};
DynamicDrawableSpan drawableSpan2 = new DynamicDrawableSpan(
DynamicDrawableSpan.ALIGN_BOTTOM) {
    @Override
    public Drawable getDrawable() {
          Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
          d.setBounds(0, 0, 50, 50);
                return d;
            }
        };
spanText.setSpan(drawableSpan, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
spanText.setSpan(drawableSpan2, 7, 8, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

12、ImageSpan画像
spanText = new SpannableString("ImageSpan");
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
</strong>d.setBounds(0, 0, 50, 50);
spanText.setSpan(new ImageSpan(d), 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

13、RelativeSizeSpan相対サイズ(テキストフォント)
spanText = new SpannableString("RelativeSizeSpan");
//  proportion:    
spanText.setSpan(new RelativeSizeSpan(2.5f), 3, 4,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

14、ReplacementSpan親、一般的に使わない
15、ScaleXSpan x軸に基づくスケーリング
spanText = new SpannableString("hello");
//  proportion:    
spanText.setSpan(new ScaleXSpan(3.8f), 3, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

16、StyleSpanフォントスタイル:太字、斜体など
spanText = new SpannableString("StyleSpan ");
//Typeface.BOLD_ITALIC:  +  
spanText.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 3, 7,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

17、SubscriptSpan下付き(数式で使用)
spanText = new SpannableString("SubscriptSpan ");
spanText.setSpan(new SubscriptSpan(), 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

18、SuperscriptSpan上付き(数学式で使用)
spanText = new SpannableString("SuperscriptSpan ");
spanText.setSpan(new SuperscriptSpan(), 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

19.TextAppearanceSpanテキスト外観(フォント、サイズ、スタイル、色を含む)
spanText = new SpannableString("TextAppearanceSpan");
//     TextAppearance,            
spanText.setSpan(new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium),
 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

20、Type faceSpanテキストフォント
spanText = new SpannableString("TypefaceSpan ");
//         ,      TypefaceSpan
spanText.setSpan(new TypefaceSpan("monospace"), 3, 10,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText);

21、URLSpanテキストハイパーリンク
spanText = new SpannableString("URLSpan ");
spanText.setSpan(new URLSpan("http://orgcent.com"), 10, spanText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
mTVText.append("
"); mTVText.append(spanText); // URLSpan mTVText.setMovementMethod(new LinkMovementMethod());

知識点:
ユーザー文字入力変更イベントのリスニング
yourEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {  } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {  } @Override public void afterTextChanged(Editable s) {  } });