TextView(텍스트 상자) 상세 설명
이 섹션 소개:
Android의 6가지 주요 레이아웃을 학습한 후 이 섹션부터 시작하여 Android의 UI 컨트롤을 하나씩 설명합니다. 이 섹션에서 제공되는 UI 컨트롤은 다음과 같습니다. ), 텍스트를 표시하는 데 사용되는 컨트롤입니다. 또 하나 선언해야 할 점은 API 문서를 번역하는 것이 아니라 실제 개발에서 일반적으로 사용되는 유용한 속성만 학습한다는 것입니다. , 해당 API를 쿼리할 수 있습니다! 물론 이 섹션에 해당하는 API 문서에 대한 링크는 각 섹션의 시작 부분에 게시됩니다: TextView API 음, 이 섹션을 시작하기 전에 다음 단위를 소개해야 합니다:
dp(dip): 장치 독립적 픽셀(장치 독립적 픽셀). 이는 장치 하드웨어와 관련이 있습니다. 이는 픽셀에 의존하지 않는 WVGA, HVGA 및 QVGA를 지원하는 데 사용하는 것이 좋습니다. px: 픽셀. 다양한 장치는 동일한 디스플레이 효과를 갖습니다. 일반적으로 HVGA는 더 일반적으로 사용되는 320x480 픽셀을 나타냅니다. pt: 포인트, 1pt = 1/72인치의 표준 길이 단위로 인쇄 산업에서 사용되며 매우 간단하고 사용하기 쉽습니다. sp: 크기 조정된 픽셀(확대 픽셀) 주로 글꼴 표시에 사용됩니다. 텍스트 크기용.
1. 기본 속성에 대한 자세한 설명:
아래의 간단한 인터페이스를 통해 가장 기본적인 속성 몇 가지를 이해할 수 있습니다.
레이아웃 코드:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width=" match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:gravity="center"
android:Background="../style/images/android-tutorial-textview.html">
<TextView
android:id="@+id/txtOne"
android:layout_width="200dp"
android:layout_height="200dp"
android:gravity="center"
android:text="TextView(显示)框)"
android:textColor="#EA5246"
android:textStyle="bold|italic"
android:Background="../style/images/android-tutorial-textview.html"
android:textSize="18sp " />
</RelativeLayout>
위 TextView에는 다음과 같은 속성이 있습니다.
id: TextView에 대한 구성 요소 ID를 설정합니다. ID에 따라 Java 코드의 findViewById() 메서드를 통해 객체를 가져온 다음 관련 작업을 수행할 수 있습니다. 속성을 설정하거나 RelativeLayout을 사용할 때 참조 구성 요소도 id를 사용합니다!
layout_width: 구성 요소의 너비는 일반적으로 **wrap_content** 또는 **match_parent(fill_parent)**로 작성됩니다. 전자는 컨트롤의 크기가 표시되는 콘텐츠만큼 커짐을 의미합니다. 후자가 컨트롤의 위치를 채우는 동안 부모 컨테이너는 물론 특정 크기로 설정할 수도 있습니다. 예를 들어 효과를 표시하기 위해 200dp로 설정했습니다.
layout_height: 컴포넌트의 너비, 내용은 위와 동일합니다.
gravity: 컨트롤의 콘텐츠, TextView의 텍스트, ImageView의 그림 등의 정렬 방향을 설정합니다.
text: 표시되는 텍스트 내용을 설정합니다. 일반적으로 string.xml 파일에 문자열을 작성한 다음, 편의상 @String/xxx를 통해 해당 문자열 내용을 가져옵니다. "", 이렇게 쓰는 것은 권장하지 않습니다! ! !
textColor: 글꼴 색상을 위와 동일하게 설정하고 colors.xml 리소스를 통해 참조하세요. 직접 작성하지 마세요!
textStyle: 글꼴 스타일 설정, 세 가지 선택 값: **보통**(효과 없음), **굵게**(굵게), **기울임꼴**(기울임꼴)
textSize: 글꼴 크기, 단위는 보통 sp!
배경: 컨트롤의 배경색은 컨트롤 전체를 채우는 색상으로 이해하시면 되고, 그림이 될 수도 있습니다!
2. 실제 개발 예
2.1 그림자가 있는 TextView
관련된 여러 속성:
android:shadowColor:그림자 색상을 설정하고 ShadowRadius와 함께 사용해야 합니다!
-
안드로이드 :shadowRadius:그림자의 흐림 정도를 0.1로 설정하여 글꼴 색상을 변경합니다. 3.0
android:shadowDx:그림자의 오프셋을 가로 방향으로 설정하는 것이 좋습니다. 가로 그림자의 시작 부분입니다.
android:shadowDy:세로 그림자가 시작되는 세로 방향의 그림자 오프셋을 설정합니다.
렌더링:
구현 코드:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:shadowColor="#F9F900"
android:shadowDx="10.0"
android:shadowDy ="10.0"
android:shadowRadius="3.0"
android:text="带阴影的TextView"
android:textColor="#4A4AFF"
android:textSize="30sp" />
2.2 테두리가 있는 TextView:
TextView의 테두리 배경을 일반 직사각형 테두리 또는 둥근 테두리로 설정하고 싶다면! 다음 내용이 도움이 될 수 있습니다! 또한 TextView는 Button과 같은 다른 많은 컨트롤의 상위 클래스이며 이러한 테두리를 설정할 수도 있습니다! 구현 원리는 매우 간단합니다. ShapeDrawable 리소스 파일을 직접 작성하면 됩니다! 그런 다음 TextView는 블랙 그루밍됩니다. 이 드로어블 리소스로 설정하면 됩니다!
ShapeDrawable 리소스 파일의 여러 노드와 속성에 대해 간략하게 설명하겠습니다.
<solid android:color = "xxx"> 이것은 배경색을 설정하는 것입니다
< 스트로크 android:width = "xdp" android:color="xxx"> 테두리의 두께와 색상을 설정합니다.
<padding androidLbottom = "xdp"...> 테두리 거리를 설정합니다
<corners android:topLeftRadius="10px"...> 둥근 모서리를 설정합니다.
<gradient> color, 선택적 속성에는 다음이 있습니다: startColor: 시작 색상 endColor: 끝 색상 centerColor: 중간 색상 angle: 방향 각도(0일 때 왼쪽에서 오른쪽으로, 각도 = 90일 때 시계 반대 방향으로 회전) 상향식 type: 그라데이션 유형 설정
구현 렌더링:
코드 구현:
1단계: 직사각형 테두리의 Drawable 작성:
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 검은색 테두리 설정 -->
<Stroke android:width="2px" android:color="../style/images/android-tutorial-textview.html"/>
< !-- 그라데이션 -->
<gradient
android:angle="270"
android:endColor="#C0C0C0"
android:startColor="#FCD209" />
<!-- 가장자리 설정 공간을 더 크게 만드세요 -->
<padding
android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp"/>
< ;/모양>
2단계: 둥근 직사각형 테두리가 있는 Drawable 작성:
<shape xmlns:android="http://schemas.android .com/apk/res/android">
검은색 테두리 -->
<Stroke
android:width="2px"
android:color="../style/images/android-tutorial-textview. html" />
<!-- 둥근 모서리의 반경 4개 설정 -->
<corners
android:bottomLeftRadius="10px"
android:bottomRightRadius="10px"
android:topLeftRadius="10px "
android: topRightRadius="10px" />
< ;!-공간을 더 크게 만들기 위해 테두리 거리를 설정-& gt;
& lt; padding
android: Bottom = "5dp"
Android: left = "5dp "
Android: 오른쪽 = "5dp"
Android: 위쪽 = "5dp" />
3단계: 将TextView的blackground属性设置成上face这两个Drawable:
xmlns:tools=" http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:Background="../style/images/android-tutorial-textview.html"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/txtOne"
android:layout_width="200dp "
android:layout_height="64dp"
android:textSize="18sp"
android:gravity="center"
android:Background="../style/images/txt_retborder"
android:text=" 형식적인 TextView " />
<TextView
android:id="@+id/txtTwo"
android:layout_width="200dp"
android:layout_height="64dp"
android:layout_marginTop=" 10dp"
android:textSize= "18sp"
android:gravity="center"
android:Background="../style/images/txt_radiuborder"
android:text="圆角边框的TextView" />
</LinearLayout>
2.3 그림이 포함된 TextView(drawableXxx):
실제 개발에서는 다음과 같은 요구 사항이 발생할 수 있습니다.
그림에 표시된 대로 이 효과를 얻으려면 ImageView가 사용됩니다. 그림 표시 + a TextView를 사용하여 텍스트를 표시한 다음 이를 LinearLayout에 넣은 다음 4개의 작은 레이아웃을 순서대로 만든 다음 큰 LinearLayout에 넣습니다. 효과는 달성할 수 있지만 조금 번거로울까요? 그리고 이전에 말했듯이 레이아웃 수준이 적을수록 성능이 향상됩니다! drawableXxx를 사용하면 위 프로세스를 저장하고 4개의 TextView를 직접 설정하여 요구 사항을 완료할 수 있습니다!
기본 사용법:
사진 설정의 핵심은 실제로 drawableXxx입니다. drawableTop(상단), drawableButtom(하단), drawableLeft(왼쪽)의 네 방향으로 사진을 설정할 수 있습니다. drawableRight(오른쪽) 또한 drawablePadding을 사용하여 그림과 텍스트 사이의 간격을 설정할 수도 있습니다!
Rendering: (4방향으로 그림 설정)
구현 코드:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width=" match_parent"
android:layout_height="match_parent"
tools:context="com.jay.example.test.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:drawable Top="@drawable/show1"
android:drawableLeft="@drawable/show1 "
android:drawableRight="@drawable/show1"
android:drawableBottom="@drawable/show1"
android:drawablePadding="10dp"
android:text="张전체蛋" /& gt;
</RelativeLayout>
몇 가지 질문: 이렇게 설정한 드로어블은 자체적으로 크기를 설정할 수 없으며 XML에서 직접 설정할 수 없다는 것을 알 수 있습니다. 따라서 Java 코드를 수정해야 합니다!
샘플 코드는 다음과 같습니다.
import android.graphics.drawable.Drawable;
import android.os.Bundle; .widget .TextView;
public class MainActivity는 Activity를 확장합니다. = (TextView) findViewById(R.id.txtZQD);
Drawable[] drawable = txtZQD.getCompoundDrawables();
(100, 0, 200, 200);
txtZQD.setCompoundDrawables(drawable[0], drawable[1 ], 드로어블[2],
드로어블
렌더링 실행:
코드 분석:
①Drawable[] drawable = txtZQD.getCompoundDrawables( ); 네 가지 다른 방향에서 이미지 리소스를 얻습니다. 배열 요소는 왼쪽 위 및 오른쪽 아래 이미지
②drawable[1].setBounds(100, 0, 200, 200); 리소스를 얻은 후 setBounds를 호출하여 왼쪽 위 및 오른쪽 아래 좌표점을 설정할 수 있습니다. 예를 들어 여기 설정은 다음을 나타냅니다. 길이는 텍스트의 맨 왼쪽부터 100dp부터 200dp까지입니다. 너비는 텍스트 위의 0dp에서 위쪽으로 확장되는 200dp입니다!
3txtZQD.setCompoundDrawables(drawable[0], drawable[1], drawable[2], drawable[3]); TextView에 대한 drawable 배열을 재설정하세요. 그림이 없으면 대신 null을 사용하세요! 추신: 또한 위에서 다음과 같이 Java 코드에서 직접 setCompoundDrawables를 호출할 수도 있습니다. TextView가 그림을 설정합니다!
2.4 autoLink 속성을 사용하여 링크 유형 식별
텍스트에 URL, 이메일, 전화번호, 지도가 나타나면 클릭할 때 autoLink 속성을 설정할 수 있습니다. 텍스트의 해당 부분은 전화 걸기 인터페이스로 이동하려면 클릭하여 기본 앱으로 이동할 수 있습니다.
렌더링을 보세요:
모두 포함되어 있고 프로토콜 헤더가 자동으로 인식됩니다~ Java 코드에서는 setAutoLinkMask(Linkify.ALL)를 호출할 수 있습니다. 지금은 프로토콜 헤더를 작성할 필요가 없으며 자동 링크가 자동으로 이를 인식하지만 이 TextView에 대해서는 여전히 설정해야 합니다. setMovementMethod(LinkMovementMethod.getInstance()); 그렇지 않으면 클릭해도 아무런 효과가 없습니다!
2.5 TextView는 HTML과 함께 작동합니다
제목에서 알 수 있듯이 일반 텍스트를 표시하는 것 외에도 TextView는 이러한 태그를 통해 일부 HTML과 유사한 태그를 미리 정의하는 기능을 사용할 수 있습니다. TextView는 다양한 글꼴 색상, 크기, 글꼴을 표시하고 사진, 링크 등도 표시합니다! 우리는 HTML 중 일부만 사용합니다. 태그와 android.text.HTML 클래스 지원을 통해 위 기능을 완성할 수 있습니다!
PS: 물론 모든 태그가 지원되는 것은 아닙니다. 일반적으로 사용되는 태그는 다음과 같습니다.
<font>: 색상과 글꼴을 설정합니다.
<big>: 글꼴 크기를 크게 설정
<small>: 글꼴 크기를 작게 설정
<i><b > : 굵은 글씨체
<a> : 링크 URL
<img>
Text를 직접 설정하면 아무런 효과가 없습니다. 문자열을 CharSequence 인터페이스로 변환하려면 Html.fromHtml() 메서드를 호출해야 합니다.
그런 다음 해당 설정이 필요하면 TextView에 대해 설정하고 다음 메서드를 호출해야 합니다. Java
setMovementMethod(LinkMovementMethod.getInstance())
시도해 볼 코드를 작성해 보겠습니다.
1) 텍스트 및 하이퍼링크 레이블 테스트
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
import android.widget.TextView;
public class MainActivity는 AppCompatActivity를 확장합니다. layout.activity_main);
TextView t1 = (TextView)findViewById(R.id.txtOne);
String s1 = "<font color='blue'><b> Baidu를 검색하면 알 수 있습니다~:< ; /b></font><br>";
s1 += "<a href = 'http://www.baidu.com'>Baidu</a>";
t1.setText( Html.fromHtml(s1));
t1.setMovementMethod(LinkMovementMethod.getInstance());
}
}
실행 중인 렌더링:
자, 테스트가 완료되었습니다~
2) src 태그 테스트 및 그림 삽입:
실행 중인 렌더링 보기:
다음으로 살펴보겠습니다. 구현 코드 및 구현 시 코드는 약간 복잡해 보이고 리플렉션을 사용합니다(그런데 드로어블 디렉터리에 아이콘 그림을 넣는 것을 잊지 마세요!):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView t1 = (TextView) findViewById(R.id .txtOne);
문자열 s1 = "그림:<img src = 'icon'/><br>";
t1.setText(Html.fromHtml(s1, new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
Drawable draw = null;
시도 {
필드 필드 = R.drawable.class.getField(source);
int resourceId = Integer.parseInt(field.get(null).toString() );
8 } catch (예외 e) {
e.printStackTrace() ;
}
반환 추첨;
}
}, null));
}
}
직접 시도해 볼 수도 있습니다. 예를 들어 사진에 하이퍼링크를 추가하고, 사진을 클릭하면 이렇게 점프할 수 있습니다~
2.6 SpannableString&SpannableStringBuilder로 텍스트를 맞춤설정하세요
위의 HTML 외에도 스타일을 맞춤설정할 수 있습니다 TextView에서는 SpannableString을 사용할 수도 있고 SpannableStringBuilder를 사용하여 이를 완성할 수도 있습니다. 둘 사이의 차이점은 전자는 불변 텍스트용이고 후자는 가변 텍스트용이라는 것입니다. 후자의 경우 텍스트를 직접 확인할 수 있습니다!
SpannableString 다음 API를 사용할 수 있습니다.
BackgroundColorSpan 배경색
ClickableSpan 텍스트는 클릭 가능하며 클릭 이벤트가 있습니다
Fore groundColorSpan 텍스트 색상(전경색)
MaskFilterSpan 흐림(BlurMaskFilter), 엠보싱(EmbossMaskFilter)
MetricAffectingSpan 상위 클래스와 같은 수정 효과, 일반적으로 사용되지 않음
Rasterizer 스팬 래스터 효과
StrikethroughSpan 줄 삭제(밑줄)
SuggestionSpan 자리 표시자와 동일
UnderlineSpan 밑줄
AbsoluteSizeSpan 절대 크기(텍스트 글꼴)
DynamicDrawableSpan 텍스트를 기반으로 그림 설정 기준선 또는 하단 정렬.
ImageSpan 그림
RelativeSizeSpan 상대 크기(텍스트 글꼴)
ReplacementSpan 상위 클래스, 일반적으로 사용되지 않음
ScaleXSpan x축 기준 크기 조정
StyleSpan 글꼴 스타일: 굵게, 기울임꼴 등
SubscriptSpan 아래 첨자(수학 공식에 사용)
SuperscriptSpan 위 첨자(수학 공식에 사용)
TextAppearanceSpan 텍스트 모양 (글꼴, 크기, 스타일 및 색상 포함)
TypefaceSpan 텍스트 글꼴
URLSpan 텍스트 하이퍼링크
알겠습니다. 꽤 많습니다. 가장 간단한 예는 다음과 같습니다. 음, 기타 매개변수 Baidu와 Google에서 직접 호출할 수 있습니다~1) 가장 간단한 예: 렌더링 실행:
구현 코드:
@Override
protected void onCreate(Bundle saveInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView t1 = (TextView) findViewById(R. id.txtone);
TextView T2 = (TextView) FindViewByid (R.id.txttwo);
SpannableString span = new spanablestring ("빨간색 호출로 녹색 하위 사진 삭제:."); 설정 배경색, setspan일 때 플래그 Spanned.span_exClusive_exClusive(모두 없음)를 지정해야 합니다. Exclusive)
// 2. 하이퍼링크에 로그인합니다. 텍스트
span.setSpan(new > ~ _ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//4. 취소선으로 텍스트 표시
span.setSpan(new StrikethroughSpan(), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//5. 밑줄 텍스트로 표시
UnderlineSpan(), 10, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
.//드로어블 리소스 가져오기
Drawable d = getResources().getDrawable(R.drawable.icon);
d.setBounds(0, 0, d.getIntrinsicWidth( ), d.getIntrinsicHeight());
ImageSpan을 생성한 다음 ImageSpan을 사용하여 텍스트를 바꿉니다.
ImageSpan imgspan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
span.setSpan(imgspan, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
t1.setText(span);
}
}
2) 부분적으로 클릭 가능한 TextView 구현 QQ Space 및 WeChat Moments를 플레이한 친구들은 다음 사항에 대해 잘 알고 있다고 생각합니다. 그러면 해당 사용자가 접속하여 사용자 관련 정보를 볼 수 있는 것 맞죠?
효과를 얻기 위한 간단한 예를 작성해 보겠습니다.
@Override
protected void onCreate(Bundle saveInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView t1 = (TextView) findViewById(R. id.txtOne);
sb = new StringBuilder();
for (int i = 0; i < 20; i++) {
sb.append("Friends" + i + ",") ;
}
T extView.BufferType.SPNNABLE);
}
//정수일보这里没有素材,就找个笑脸代替下~ ㅋㅋㅋ / /SpannableStringBuilder 객체 생성, 여러 문자열 연결
spanablestringBuilder SSB = New SpanNablestringBuilder (spanstr);
ssb.append (str)
string [] likeusers = str.split (","); {
for (int i = 0; i < likeUsers.length; i++) {
최종 문자열 이름 = likeUsers[i];
> (MainActivity.this, 이름,
@Override
,, , ,,,, 줄, 글꼴 색상 설정; 파란색입니다
ds.setColor(Color.BLUE);
ds.setUnderlineText(false); ~ ("잠깐만" + likeUsers.length + "좋은 것 같아요");
}
}
작업 렌더링:
핵심은 실제로 ClickableSpan의 설정입니다~ QQ 공간 댓글을 작성하는 것을 조작하고 직접 작성할 수 있습니다~
2.7 텍스트 뷰를 사용하여 마키 효과를 얻습니다
간단히 이야기하겠습니다. 정보 웹과 마찬가지로 이렇게 계속 스크롤되는 텍스트 줄이 있습니다. 구현 렌더링, 한눈에 이해 가능~
구현 렌더링:
코드 구현:
android:id="@+id/txtOne"
android:layout_width="match_parent "
Android:layout_height ="wrap_content"
Android: textSize ="18SP "
Android: Singleline ="true "
Android: Ellipsize ="Marquee " OID: Marqueerepetlimit = "Marquee_Forever"
Android: Focusable = "TRUE"
android: focusableInTouchMode="true"
.
2.8 TextView 단어 간격 및 줄 간격 설정
일반적으로 문서를 작성할 때와 마찬가지로 아래쪽 줄이나 단어 사이의 간격을 조판하고 설정해야 합니다. Android의 TextView는 다음과 같이 설정할 수도 있습니다.
문자 간격:
android:textScaleX:调节字间距的,默认值1.0f,值是float Java中setScaleX(2.0f);
줄 간격: Android 시스템의 TextView는 중국어를 표시할 때 각 줄의 줄 간격을 유지하기 위해 기본적으로 더 작아집니다.
android:lineSpacingExtra: 줄 간격 설정(예: "3dp") android:lineSpacingMultiplier: 줄 간격의 배수(예: "1.2") 설정
Java 코드에서는 다음을 통해 설정할 수 있습니다. setLineSpacing 메소드
2.9 자동 줄 바꿈
자동 줄 바꿈은 android:singleLine을 통해 설정되며 기본값은 false입니다.
자동 줄 바꿈이 필요한 경우 다음을 사용할 수 있습니다.
android:singleLine = "false"
줄 바꿈 없이 한 줄로 표시하려면 다음을 사용할 수 있습니다.
android:singleLine = "true"
또한 여러 줄이 끝없이 표시되도록 설정할 수도 있습니다. maxLines 속성을 추가하세요!
3. 이 섹션 요약:
이 섹션에서는 Android의 TextView 컨트롤에 대한 자세한 분석을 제공하고 개발 시 몇 가지 일반적인 문제에 대한 솔루션을 제공합니다. 실제 개발에 큰 도움이 될 것입니다. 또한, 작성자의 능력이 제한되어 있으므로 제가 작성한 내용에 몇 가지 결함이 있을 수 있으므로 지적해 주시기 바랍니다. 정말 감사합니다~ 또한, 전재시 출처를 표기해주세요: coder-pig! 감사합니다~