SpannableStringBuilder는 여러 글꼴 / 텍스트 크기 등으로 많은을 생성합니다. 예?
다음과 같은 높은 곳을 표시 할 TextView에 배치 된 곳을 표시합니다.
첫 부분은 굵게 표시 되지 않음 BOLD 나머지는 굵게 표시 되지 않음
그래서 어떻게이 일을 할 수 있는지 알고 싶어요 ?SpannableStringBuilder
이 작업을 수행하기 위해 세 개의 TextEdit를 사용할 수 있도록 최상의 솔루션을 사용하고 싶습니다.
First Part Not Bold BOLD rest not bold
@Rajesh가 제안한대로 또는 이것에 의해 제출할 수 있습니다.
String normalBefore= "First Part Not Bold ";
String normalBOLD= "BOLD ";
String normalAfter= "rest not bold";
String finalString= normalBefore+normalBOLD+normalAfter;
Spannable sb = new SpannableString( finalString );
sb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), finalString.indexOf(normalBOLD)+ normalBOLD.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //bold
sb.setSpan(new AbsoluteSizeSpan(intSize), finalString.indexOf(normalBOLD)+ normalBOLD.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//resize size
받은 TextView에 표시 비용
textview.setText(sb, TextView.BufferType.SPANNABLE);
받아 들여지는 대답은 괜찮지 만 (그리고 나는 그것을 찬성했습니다) 신청 요청 한대로 SpannableStringBuilder를 사용하지 않습니다. 빌더가 가장 이해하기 쉬운 경우가 있었기 때문에 여기에 코드가 있습니다 (다른 사람에게 도움이 될 경우 텍스트 색상을 변경하는 개체 포함). SpannableStringBuilder는 생성자에 "추가"를 사용하여 "굵은"텍스트 앞에 많은 것을 생성 할 수 있도록 다음대로 시작을 기록 할 수 있습니다. 나는 이것이 허용되는 대답보다 더 빠른 코드라고 생각합니다.
SpannableStringBuilder longDescription = new SpannableStringBuilder();
longDescription.append("First Part Not Bold ");
int start = longDescription.length();
longDescription.append("BOLD");
longDescription.setSpan(new ForegroundColorSpan(0xFFCC5500), start, longDescription.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
longDescription.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), start, longDescription.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
longDescription.append(" rest not bold");
API 21에서 SpannableStringBuilder는 수행하는 간단한 방법이 포함되어 있습니다. 다음은 솔루션 예입니다.
SpannableStringBuilder builder= new SpannableStringBuilder();
StyleSpan boldSpan = new StyleSpan(android.graphics.Typeface.BOLD);
builder.append("First Part Not Bold ")
.append("BOLD ", boldSpan, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
.append("rest not bold");
API 21을 지원하지 않을 확률이 높거나 해당하는 코드를 복제 할 수 있습니다.
public SpannableStringBuilder append(CharSequence text, Object what, int flags) {
int start = length();
append(text);
setSpan(what, start, length(), flags);
return this;
}
Kotlin을 사용하는 경우 android-ktx 라이브러리를 사용하여 다음을 수행 할 수 있습니다.
val s = SpannableStringBuilder()
.append("First Part Not Bold ")
.bold { append("BOLD") }
.append("Rest not bold")
의 bold
확장 기능입니다 SpannableStringBuilder
. 사용할 수있는 작업 목록은 여기 에서 설명서를 참조하십시오 .
또 다른 예 :
val s = SpannableStringBuilder()
.color(green, { append("Green text ") })
.append("Normal text ")
.scale(0.5, { append("Text at half size " })
.backgroundColor(green, { append("Background green") })
green
해결 된 RGB 색상은 어디에 있습니까?
스팬을 중첩하여 클러스터 DSL로 끝낼 수도 있습니다.
bold { underline { italic { append("Bold and underlined") } } }
build.gradle
작동 광고 앱 모듈 수준에서 다음이 필요합니다 .
repositories {
google()
}
dependencies {
implementation 'androidx.core:core-ktx:0.3'
}
Html
클래스를 사용하여 TextView에서 HTML 코드를 사용하십시오 .
Spanned styledText = Html.fromHtml("First Part Not Bold <b>BOLD</b> rest not bold");
textView.setText(styledText);
이 코드는 html 굵게 태그 안에있는 모든 것을 굵게 설정해야합니다. 또한 태그를 삭제하여 내부 내용 만 표시합니다.
SpannableStringBuilder sb = new SpannableStringBuilder("this is <b>bold</b> and this is <b>bold too</b> and this is <b>bold too, again</b>.");
Pattern p = Pattern.compile("<b>.*?</b>", Pattern.CASE_INSENSITIVE);
boolean stop = false;
while (!stop)
{
Matcher m = p.matcher(sb.toString());
if (m.find()) {
sb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), m.start(), m.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
sb.delete(m.end()-4, m.end());
sb.delete(m.start(), m.start() + 3);
}
else
stop = true;
}
이 코드는 Superscript (sup 태그) 같은 다른 html 스타일 태그에도 적용 할 수 있습니다.
SpannableStringBuilder sb = new SpannableStringBuilder("text has <sup>superscript</sup> tag");
Pattern p = Pattern.compile("<sup>.*?</sup>", Pattern.CASE_INSENSITIVE);
boolean stop = false;
while (!stop)
{
Matcher m = p.matcher(sb.toString());
if (m.find()) {
sb.setSpan(new SuperscriptSpan(), m.start(), m.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
sb.delete(m.end()-6, m.end());
sb.delete(m.start(), m.start() + 5);
}
else
stop = true;
}
색상을 설정하려면 setSpan과 함께 ForegroundColorSpan을 사용하십시오.
sb.setSpan(new ForegroundColorSpan(Color.rgb(255, 0, 0)), m.start(), m.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
도움이 되었기를 바랍니다.
그래서 나는 이것이 해결되었다는 것을 알고 있으며 SpannableStringBuilder로 요청한 것처럼 문자열을 더 동적으로 만들고 싶을 때 나는 이것을 올릴 것이라고 생각했습니다.
// Stuff needed
TextView DataTextView = (TextView)rootView.findViewById(R.id.DataView);
String Fields[] = {...database column names as strings... "x","y"};
String DataString = new String();
int start,stop; // Start and Stop of formatting
// Final Result
SpannableStringBuilder coloredString = new SpannableStringBuilder();
SpannableString temp; // Small segment of colored string
for (int i =0; i < Fields.length; i++)
{
if (database_result.containsKey(Fields[i])) // Be sure a field exists in the ContentValues
{
DataString = Fields[i]+": ";
start = DataString.length();
DataString = DataString+ +database_result.getAsInteger(Fields[i])+" ";
stop= DataString.length();
temp = new SpannableString(DataString);
temp.setSpan(new ForegroundColorSpan(Color.WHITE),start, stop, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
coloredString.append(temp);
}
}
DataTextView.setText(coloredString);
database_result는 SQL 쿼리의 반환 된 Cursor 유형에서 생성 한 ContentValues 유형입니다. 내가 가진 유일한 문제는 처음에는 ColorSpaning이 첫 번째 세그먼트였습니다. 루프에서 하나 (또는 다른 종류의 범위)를 사용할 때마다 새 ForegroundColorSpan을 선언해야한다는 점이 이음새가됩니다.
이를 위해 TextAppearanceSpan 과 함께 SpannableStringBuilder 를 사용할 수도 있습니다 . 그렇게 구현하려면 아래 단계를 따르십시오.
- 에서 스타일을 만듭니다
styles.xml
.
<style name="BoldStyle">
<!-- Can add other styling attributes -->
<item name="android:textStyle">bold</item>
......
</style>
- 아래 코드를 사용하십시오.
SpannableStringBuilder builder = new SpannableStringBuilder ( "첫 부분은 굵게 표시되지 않음 BOLD 나머지 부분은 굵게 표시되지 않음"); builder.setSpan (new TextAppearanceSpan (this, R.style.BoldStyle), 20, 24, 0); ((TextView) findViewById (R.id.tv7)). setText (builder);
그게 다야. 누군가를 도울 수 있기를 바랍니다.
SpannableBuilder를 사용할 수 있는데 왜 SpannableStringBuilder를 사용합니까 ?? ( https://gist.github.com/qtyq/90f9b4894069a8b3676c )
SpannableString ss = SpannableBuilder.init("First Part Not Bold BOLD rest not bold")
.makeBold("BOLD")
.create()
'ProgramingTip' 카테고리의 다른 글
strcpy 대 memcpy (0) | 2020.11.06 |
---|---|
jQuery 애니메이션 스크롤 (0) | 2020.11.06 |
Intellisense는 Visual Studio 2012의 JavaScript에서 작동하지 않습니다. (0) | 2020.11.06 |
중단 / 종료 펼쳐 (0) | 2020.11.05 |
NodeJS-setTimeout (fn, 0) 대 setImmediate (fn) (0) | 2020.11.05 |