특정 글꼴 및 크기의 특정 텍스트 문자열에 대해 텍스트 뷰에서 설정할 수있는 텍스트의 양 스크롤해야합니다. 나는 스크롤 할 필요없이 얼마나 많은 텍스트가 TextView 안에 들어갈 수 있는지를 의미합니다. 이것은 How do I determine how much text will fit in a TextView in Android?과 유사하지만 작동하는 해결책을 찾을 수 없습니다. 도와주세요.스크롤 할 필요가 없도록 TextView에 얼마만큼의 텍스트를 설정할 수 있습니까?
답변
다른 옵션을 이미 찾았으므로 쉬운 방법이 없다고 가정하면 이론적 인 (아직 테스트하지 않은) hackish 접근 방식이 효과적 일 수 있습니다.
TextView를 확장하는 새 클래스를 만듭니다. 그런 다음 TextView의 내용이 업데이트 된 후에 호출 할 메서드를 재정의합니다. 사용할 방법이 더 있지만이 예제에서는 onDraw()를 사용해 보겠습니다. 이 메서드는 너비를 확인하고 스크롤 할 수 있어야하는지 확인합니다. 그렇다면 문자열을 자르고 텍스트를 설정합니다. 더 이상 스크롤 할 필요가 없을 때까지 루프에서이 작업을 수행합니다.
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(getWidth() < computeHorizontalScrollRange()){
// Requires scrolling, the string is too long
// Do whatever you need to do to trim the string, you could also grab the remaining string and do something with it.
// Set the TextView to use the trimmed string.
}
}
무한 루프가 발생하지 않았는지 확인하고 너비가 0인지 확인해야합니다.
다양한 android:ellipsize
옵션을 볼 수도 있습니다.
이는 그냥 내 빠른 두뇌 폭풍 : 문자
- 측정 텍스트 길이
- 가져 오기 화면 크기 및 밀도 정보
- 이의 대략적인 양을 계산 글꼴 크기, 줄 높이를 가져옵니다 주어진 문자열이 위의 데이터에서 주어진 공간을 차지합니다.
- 따라서 문자열을 나눕니다.
어떻게 그 질문, 당신이 질문을 보면, 나는 이미 당신과 같은 다른 질문 링크에서 제안 된 방법을 시도했습니다. –
측정 된 높이가 computeHorizontalScrollRange()
보다 큰 경우 TextView
클래스를 확장하고 onLayout()
메서드를 재정 의하여 문자열을 자릅니다.
나는 때문에 솔루션은 조금 더 생각 : (뷰가 생성 될 때) 그것은 한 번만 텍스트 트림
- ;
- "트림 된"텍스트를 나중에 복원하려는 경우 쉽게 저장할 수 있습니다.
- OOP는 멋지다.
아직 시도하지는 않았지만 제대로 작동하지 않을 것이라고 생각합니다. 정확한 크기가 어떻게 다듬어 지는지 알기 때문입니다.레이아웃 메서드는 한 번만 호출됩니다. –
트리머가 될 정확한 크기를 찾을 수 없습니다. 올바른 크기가 될 때까지 반복합니다. – goncalossilva
나는 실제로 비슷한 것을 필요로했다. 나는 TextView
너비의 반 고정 크기가 필요했지만 텍스트는 항상 거기에 들어가야했습니다. 크기가 중요하지 않기 때문에 필자는 텍스트 크기가 변경 될 때까지 텍스트 크기를 변경하는보기를 만들었습니다.
import android.content.Context;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.TextView;
/**
* The text inside this TextView will resize to fit.
* It will resize until it fits within the view and padding
*/
public class FitTextView extends TextView {
private float defaultSize = 12;
public FitTextView(Context context) {
super(context);
}
public FitTextView(Context context, AttributeSet attrs) {
super(context, attrs);
defaultSize = getTextSize();
}
public FitTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
defaultSize = getTextSize();
}
/**
* Set the default size. This size is set every time the
* view is resized.
* @param size
*/
public void setDefaultSize(float size) {
defaultSize = size;
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
setTextSize(TypedValue.COMPLEX_UNIT_PX, defaultSize);
fitCharsInView();
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
public void setText(CharSequence text, BufferType type) {
fitCharsInView();
super.setText(text, type);
}
/**
* Decreases the text size until it fits inside the view
*/
public void fitCharsInView() {
int padding = getPaddingLeft() + getPaddingRight();
int viewWidth = getWidth() - padding;
float textWidth = getTextWidth();
int iKillInfite = 0;
int maxIteration = 10000;
while(textWidth > viewWidth && iKillInfite < maxIteration) {
iKillInfite++;
float textSize = getTextSize();
setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize-1);
textWidth = getTextWidth();
}
}
/**
* Gets the width in pixels of the text
* @return
*/
private float getTextWidth() {
return getPaint().measureText(getText().toString());
}
}
- 1. TextView에 텍스트를 삽입 할 수 있습니까?
- 2. UIWebView - (웹보기 자체에서) 스크롤 할 필요가 없도록 자동 크기 조정
- 3. 포커스가있는 셀을 스크롤 할 수 없도록 설정했습니다.
- 4. 다시 생성 할 필요가 없도록 페이지 캐싱?
- 5. 어떻게 문자열을 textView에 표시 할 수 있습니까?
- 6. TextBox 텍스트를 선언적으로 설정할 수 있습니까?
- 7. 스크롤하는 내용으로 스크롤 할 배경 이미지를 어떻게 설정할 수 있습니까?
- 8. Wix : 어떻게하면 VerifyReadyDlg에 표시 할 텍스트를 런타임에 설정할 수 있습니까?
- 9. 텍스트가 스크롤 바없이 GTK # TextView에 맞습니다.
- 10. 매번 서버에 인증 할 필요가 없도록 인증서를 어떻게 저장합니까?
- 11. NSTextView에서 텍스트를 설정할 수 없습니다.
- 12. WPF의 ListView에서 드래그 할 수 없도록 설정
- 13. Flash CS4에서 GPU로 얼마만큼의 상호 작용을 할 수 있습니까?
- 14. Blackberry의 앱에서 얼마만큼의 메모리 (RAM)를 할당 할 수 있습니까?
- 15. MyISAM DB에 얼마만큼의 데이터를 저장할 수 있습니까?
- 16. Android의 EditText/TextView에 임시 텍스트를 설정 하시겠습니까?
- 17. 어떻게 스크롤 뷰를 비활성화 할 수 있습니까?
- 18. TextView에 텍스트를 입력 한 후 키보드 제거
- 19. 아이폰 - TextView 텍스트를 설정할 때 heightForRowAtIndexPath 스크롤 문제가 발생했습니다.
- 20. CSS : 스크롤 할 때 tbody 높이를 %로 설정할 수 없습니다.
- 21. TextView에 긴 텍스트를 설정하는 가장 좋은 방법
- 22. 글자에 글자를 입력 할 수 없도록 설정하십시오.
- 23. scss 파일이 웹 루트에 없도록 SASS를 구성 할 수 있습니까?
- 24. 스윙의 프레임에 둘 이상의 스크롤 막대를 설정할 수 있습니까?
- 25. AutoScroll을 사용하여 UserControl에서 스크롤 영역과 원점을 어떻게 설정할 수 있습니까?
- 26. 이미지에 alt을 포함해야 할 필요가 있습니까?
- 27. 동일한 TextView에 여러 서체가있을 수 있습니까?
- 28. 필수 속성에서 동적 텍스트를 ErrorMessage로 설정할 수 있습니까?
- 29. TextView에 대한 대안이 있습니까?
- 30. 어떻게 WPT TextBox 스크롤 텍스트를 캐럿 위치로 만들 수 있습니까?
작동합니다. 폭 대신 높이를 사용했습니다. 그러나 여전히 더 나은 대답을 찾고 있습니다. 결국 텍스트를 여러 번 변경하는 것이 최선의 방법은 아닙니다. –
음, 메서드에 문제가 있습니다. 단어 경계에 클립 할 수 없습니다. –