AndroidユーザーインタフェースUIコンポーネント--TextViewとそのサブクラス(3)EditViewおよび各種Span文字スタイルの説明
21533 ワード
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背景色
2、ClickableSpanテキストはクリック可能で、クリックイベントがある
3、ForegroundColorSpanテキストカラー(前景色)
4、MaskFilterSpan修飾効果、例えばBlurMaskFilter、エンボス(EmbossMaskFilter)
5、MetricAffectingSpan親、一般的に使わない
6、RasterizerSpan格子効果
7、StrikethroughSpan削除線(中線)
8、SuggestionSpanはプレースホルダに相当し、一般的にEditText入力ボックスで使用される.このテキストをダブルクリックすると、プロンプトボックスが表示され、推奨(推奨)テキストが選択され、選択したテキストがプレースホルダに置き換えられます.入力方式で使われることが多い.
9、UnderlineSpan下線
10、AbsoluteSizeSpan絶対サイズ(テキストフォント)
11、DynamicDrawableSpanは、テキストベースラインまたは下部に基づいて画像を設定します.
12、ImageSpan画像
13、RelativeSizeSpan相対サイズ(テキストフォント)
14、ReplacementSpan親、一般的に使わない
15、ScaleXSpan x軸に基づくスケーリング
16、StyleSpanフォントスタイル:太字、斜体など
17、SubscriptSpan下付き(数式で使用)
18、SuperscriptSpan上付き(数学式で使用)
19.TextAppearanceSpanテキスト外観(フォント、サイズ、スタイル、色を含む)
20、Type faceSpanテキストフォント
21、URLSpanテキストハイパーリンク
知識点:
ユーザー文字入力変更イベントのリスニング
テクニック:
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) { } });