안 드 로 이 드 는 textview 의 최대 디 스 플레이 를 어떻게 가 져 옵 니까?
5256 단어 androidtextview최대 디 스 플레이
업무 중 에 사용 하 는 방법 중 하 나 는 특별히 정확 하 지 는 않 지만 효과 가 좋 습 니 다.여기 서 공유 하 겠 습 니 다.
/**
* textview
* @param text
* @param size
* @param maxWidth textview
* @return
*/
private float getLineMaxNumber(String text, float size,float maxWidth) {
if (null == text || "".equals(text)){
return 0;
}
Paint paint = new Paint();
paint.setTextSize(size);
//
float textWidth = paint.measureText(text);
// textWidth
float width = textWidth / text.length();
float total = maxWidth / width;
return total;
}
위의 이 방법 은 정확 하지 않 지만 RecyclerView 나 ListView 에서 사용 하기에 적합 하여 너무 많은 대상 이 생 성 되 지 않도록 합 니 다.방법 2
/**
* textview ( TextView )
*
* @param text
* @param paint textview.getPaint()
* @param maxWidth textview.getMaxWidth()/ , 200dp
*/
private int getLineMaxNumber(String text, TextPaint paint, int maxWidth) {
if (null == text || "".equals(text)) {
return 0;
}
StaticLayout staticLayout = new StaticLayout(text, paint, maxWidth, Layout.Alignment.ALIGN_NORMAL
, 1.0f, 0, false);
//
return staticLayout.getLineEnd(0);
}
Static Layout 를 이용 하면 표시 할 수 있 는 최대 문자 수 를 쉽게 얻 을 수 있 습 니 다.연장:
한 줄 의 TextView 에 대해 문자열 이 한 줄 을 초과 할 때 표시 되 지 않 은 일부 문자열 을 어떻게 가 져 옵 니까?
textview 에서 최대 줄 수 를 1 로 설정 한 후에 텍스트 가 textview 를 초과 하고 textView 끝 에 생략 번 호 를 표시 합 니 다.저 는 생략 번호 가 대표 하 는 내용 을 알 고 싶 습 니 다.
생각:
TextView 의 폭 이 xml 에 설 치 된 구체 적 인 수치 라 고 가정 합 니 다.예 를 들 어 300 dp,
(이 문 제 를 간소화 하기 위해 match 로 설정 하면parent 혹은 wrapcontent,프로그램 이 실 행 될 때 폭 을 계산 해 야 하 며,getWidth 는 항상 0 으로 돌아 가 는 것 이 번 거 롭 습 니 다.)
예 를 들 어 이렇게 설정 되 어 있 습 니 다.
<TextView
android:id="@+id/textView"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true" />
그리고 아주 긴 문자열 을 채 웠 습 니 다.예 를 들 어 다음 과 같 습 니 다.
String str = "If you really want to hear about it, the first thing you'll probably want to know";
, :
If you really want to hear about it, the first thin...
, , , 。
, n , TextView , 。
String str = "If you really want to hear about it, the first thing you'll probably want to know";
mTextView = (TextView) findViewById(R.id.textView);
// TextView :xml 300dp, px
float textViewWidth = convertDpToPixel(300);
float dotWidth = getCharWidth(mTextView, '.');
Log.d(TAG, "TextView width " + textViewWidth);
int sumWidth = 0;
for (int index=0; index<str.length(); index++) {
//
char c = str.charAt(index);
float charWidth = getCharWidth(mTextView, c);
sumWidth += charWidth;
Log.d(TAG, "#" + index + ": " + c + ", width=" + charWidth + ", sum=" + sumWidth);
if (sumWidth + dotWidth*3 >= textViewWidth) {
Log.d(TAG, "TextView shows #" + index + " char: " + str.substring(0, index));
break;
}
}
// Dp Px
private float convertDpToPixel(float dp){
Resources resources = getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
return px;
}
//
public float getCharWidth(TextView textView, char c) {
textView.setText(String.valueOf(c));
textView.measure(0, 0);
return textView.getMeasuredWidth();
}
결 과 는 다음 과 같 습 니 다.영광 3C 와 LG G3 에서 테스트 를 통 과 했 습 니 다.10-22 01:17:42.046: D/Text(21495): TextView width 600.0
10-22 01:17:42.048: D/Text(21495): #0: I, width=8.0, sum=8
10-22 01:17:42.049: D/Text(21495): #1: f, width=9.0, sum=17
10-22 01:17:42.049: D/Text(21495): #2: , width=7.0, sum=24
10-22 01:17:42.049: D/Text(21495): #3: y, width=14.0, sum=38
......
10-22 01:17:42.053: D/Text(21495): #17: t, width=9.0, sum=213
10-22 01:17:42.053: D/Text(21495): #18: , width=7.0, sum=220
10-22 01:17:42.053: D/Text(21495): #19: t, width=9.0, sum=229
......
10-22 01:17:42.061: D/Text(21495): #50: n, width=16.0, sum=575
10-22 01:17:42.061: D/Text(21495): #51: g, width=16.0, sum=591
10-22 01:17:42.061: D/Text(21495): TextView shows #51 char: If you really want to hear about it, the first thin
안 드 로 이 드 가 textview 를 가장 많이 가 져 오 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 textview 와 관련 된 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 저 희 를 많이 사랑 해 주세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.