Android에서 TextView 스크롤 가능하게 만들기
텍스트 보기에 너무 길어서 한 화면에 들어갈 수 없는 텍스트를 표시하는 중입니다.텍스트 보기를 스크롤할 수 있게 만들어야 합니다.내가 어떻게 그럴 수 있을까?
코드는 다음과 같습니다.
final TextView tv = new TextView(this);
tv.setBackgroundResource(R.drawable.splash);
tv.setTypeface(face);
tv.setTextSize(18);
tv.setTextColor(R.color.BROWN);
tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent e) {
Random r = new Random();
int i = r.nextInt(101);
if (e.getAction() == e.ACTION_DOWN) {
tv.setText(tips[i]);
tv.setBackgroundResource(R.drawable.inner);
}
return true;
}
});
setContentView(tv);
다음을 사용할 필요가 없습니다.ScrollView
정말로.
설정만 하면 됩니다.
android:scrollbars = "vertical"
의 속성TextView
레이아웃의 xml 파일에 있습니다.
다음을 사용합니다.
yourTextView.setMovementMethod(new ScrollingMovementMethod());
당신의 코드로.
빙고, 스크롤!
순수하게 XML을 사용한 방법은 다음과 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView
android:id="@+id/SCROLLER_ID"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:fillViewport="true">
<TextView
android:id="@+id/TEXT_STATUS_ID"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"/>
</ScrollView>
</LinearLayout>
주의:
android:fillViewport="true"
와 결합하여android:layout_weight="1.0"
텍스트 보기가 사용 가능한 모든 공간을 차지합니다.스크롤 보기를 정의할 때 다음을 지정하지 마십시오.
android:layout_height="fill_parent"
그렇지 않으면 스크롤 뷰가 작동하지 않습니다! (이것은 제가 방금 한 시간을 낭비하게 만들었습니다! FFS).
전문 팁:
텍스트를 추가한 후 아래로 프로그래밍 방식으로 스크롤하려면 다음을 사용합니다.
mTextStatus = (TextView) findViewById(R.id.TEXT_STATUS_ID);
mScrollView = (ScrollView) findViewById(R.id.SCROLLER_ID);
private void scrollToBottom()
{
mScrollView.post(new Runnable()
{
public void run()
{
mScrollView.smoothScrollTo(0, mTextStatus.getBottom());
}
});
}
필요한 것은 setMovementMethod()뿐입니다.다음은 선형 레이아웃을 사용한 예입니다.
main.xml 파일
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/tv1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello"
/>
</LinearLayout>
파일 WordExtractTest.java
public class WordExtractTest extends Activity {
TextView tv1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1 = (TextView)findViewById(R.id.tv1);
loadDoc();
}
private void loadDoc() {
String s = "";
for(int x=0; x<=100; x++) {
s += "Line: " + String.valueOf(x) + "\n";
}
tv1.setMovementMethod(new ScrollingMovementMethod());
tv1.setText(s);
}
}
추가하기만 하면 텍스트 보기 만들기
TextView textview= (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(new ScrollingMovementMethod());
을 넣을 필요가 없습니다.
android:Maxlines="AN_INTEGER"`
다음을 추가하기만 하면 작업을 수행할 수 있습니다.
android:scrollbars = "vertical"
그리고 이 코드를 Java 클래스에 넣습니다.
textview.setMovementMethod(new ScrollingMovementMethod());
둘 중 하나를 선택할 수 있습니다.
- 에워싸다
TextView
a에 의하여ScrollView
또는 - 이동 방법을 다음으로 설정합니다.
ScrollingMovementMethod.getInstance();
.
내가 찾은 가장 좋은 방법은:
TextView를 다음과 같은 추가 특성을 가진 EditText로 바꿉니다.
android:background="@null"
android:editable="false"
android:cursorVisible="false"
스크롤 보기로 래핑할 필요가 없습니다.
간단합니다. 제가 한 방법은 다음과 같습니다.
XML 측면:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" tools:context="com.mbh.usbcom.MainActivity"> <TextView android:id="@+id/tv_log" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="vertical" android:text="Log:" /> </RelativeLayout>
Java 측:
tv_log = (TextView) findViewById(R.id.tv_log); tv_log.setMovementMethod(new ScrollingMovementMethod());
보너스:
텍스트가 채워질 때 텍스트 보기가 아래로 스크롤되도록 하려면 다음을 추가해야 합니다.
android:gravity="bottom"
TextView xml 파일로 이동합니다.텍스트가 더 많이 들어오면 자동으로 아래로 스크롤됩니다.
물론 텍스트를 설정하는 대신 추가 기능을 사용하여 텍스트를 추가해야 합니다.
tv_log.append("\n" + text);
로그 목적으로 사용했습니다.
이것이 도움이 되었으면 좋겠습니다 ;)
XML만 사용하여 "스크롤바를 텍스트 보기에 적용하는 방법"입니다.
먼저 main.xml 파일에서 Textview 컨트롤을 가져와 텍스트를 작성해야 합니다.다음과 같이:
<TextView
android:id="@+id/TEXT"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/long_text"/>
그런 다음 스크롤 보기 사이에 텍스트 보기 컨트롤을 배치하여 다음 텍스트에 대한 스크롤 막대를 표시합니다.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<ScrollView
android:id="@+id/ScrollView01"
android:layout_height="150px"
android:layout_width="fill_parent">
<TextView
android:id="@+id/TEXT"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/long_text"/>
</ScrollView>
</RelativeLayout>
바로 그거야...
이렇게 하면 스크롤 막대를 사용하여 텍스트를 부드럽게 스크롤할 수 있습니다.
ScrollView scroller = new ScrollView(this);
TextView tv = new TextView(this);
tv.setText(R.string.my_text);
scroller.addView(tv);
Somebody Somether(Android에서 텍스트 보기 스크롤 가능하게 만들기)의 위 "프로팁"은 잘 작동하지만, 스크롤 보기에 동적으로 텍스트를 추가하고 사용자가 스크롤 보기의 맨 아래에 있을 때만 추가 후 자동으로 맨 아래로 스크롤하려면 어떻게 해야 합니까?(아마도 사용자가 무언가를 읽기 위해 스크롤을 올렸을 때 추가하는 동안 자동으로 아래쪽으로 재설정하지 않기 때문에 귀찮을 것입니다.)
어쨌든, 여기 있습니다.
if ((mTextStatus.getMeasuredHeight() - mScrollView.getScrollY()) <=
(mScrollView.getHeight() + mTextStatus.getLineHeight())) {
scrollToBottom();
}
mTextStatus.getLine높이()는 사용자가 ScrollView 끝에서 한 줄 이내에 있는 경우 아래쪽()으로 스크롤하지 않도록 합니다.
텍스트 보기를 스크롤 가능하게 만들기 위한 코틀린
myTextView.movementMethod= ScrollingMovementMethod()
또한 xml에 이 속성을 추가합니다.
android:scrollbars = "vertical"
텍스트 보기 내에서 텍스트를 스크롤하려면 다음을 수행합니다.
먼저 텍스트 보기를 하위 클래스로 분류해야 합니다.
그리고 나서 그것을 사용합니다.
다음은 하위 분류 텍스트 보기의 예입니다.
public class AutoScrollableTextView extends TextView {
public AutoScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setEllipsize(TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
public AutoScrollableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setEllipsize(TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
public AutoScrollableTextView(Context context) {
super(context);
setEllipsize(TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if(focused)
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
@Override
public void onWindowFocusChanged(boolean focused) {
if(focused)
super.onWindowFocusChanged(focused);
}
@Override
public boolean isFocused() {
return true;
}
}
이제 XML에서 다음과 같은 방법으로 사용해야 합니다.
<com.yourpackagename.AutoScrollableTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is very very long text to be scrolled"
/>
바로 그겁니다.
코틀린을 사용하는 경우 다음과 같은 방식으로 XML.
<TextView
android:id="@+id/tvMore"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="3"
android:scrollbars="vertical" />
활동
tvMore.movementMethod = ScrollingMovementMethod()
XML의 텍스트 보기에 다음을 추가합니다.
android:scrollbars="vertical"
마지막으로, 추가합니다.
textView.setMovementMethod(new ScrollingMovementMethod());
Java 파일에 있습니다.
깜박임 동작을 지원하는 TextView 스크롤을 찾지 못했습니다. 위 또는 아래로 이동한 후에도 계속 스크롤됩니다.여러 가지 이유로 ScrollView를 사용하고 싶지 않았고, 텍스트를 선택하고 링크를 클릭할 수 있는 MovementMethod가 없었던 것 같습니다.
스크롤이 완료되면 보기에 원하는 항목을 입력할 때 이 줄을 보기의 마지막 줄에 추가합니다.
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
텍스트 편집 솔루션을 사용하지 않으려는 경우 다음 작업을 수행할 수 있습니다.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourLayout);
(TextView)findViewById(R.id.yourTextViewId).setMovementMethod(ArrowKeyMovementMethod.getInstance());
}
XML 레이아웃에 추가합니다.
android:ellipsize="marquee"
android:focusable="false"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="To Make An textView Scrollable Inside The TextView Using Marquee"
코드에는 다음과 같은 행을 작성해야 합니다.
textview.setSelected(true);
textView.setMovementMethod(new ScrollingMovementMethod());
yourtextView.setMovementMethod(new ScrollingMovementMethod());
이제 스크롤할 수 있습니다.
이전 게시물인 것은 알지만, 이것이 제가 자바 쪽에서 이 문제를 처리하는 방법입니다.
// Allow textView to scroll
tv.setSingleLine(true);
tv.setHorizontallyScrolling(true);
tv.setEllipsize(TextUtils.TruncateAt.MARQUEE);
tv.setMarqueeRepeatLimit(-1); // Infinite
// TextView must be 'selected'
tv.setSelected(true);
// Padding not necessary, but this helps so the text isn't right
// up against the side of a screen/layout
tv.setPadding(10, 0, 10, 0);
아래 코드는 자동 수평 스크롤 텍스트 보기를 만듭니다.
xml 사용에 TextView를 추가하는 동안
<TextView android:maxLines="1"
android:ellipsize="marquee"
android:scrollHorizontally="true"/>
Create()에서 TextView의 다음 속성 설정
tv.setSelected(true);
tv.setHorizontallyScrolling(true);
사용할 때 이 문제가 있었습니다.TextView
에의 에.ScrollView
이 해결책은 저에게 효과가 있었습니다.
scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
description.getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
});
description.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
description.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
이렇게 사용합니다.
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:maxLines = "AN_INTEGER"
android:scrollbars = "vertical"
/>
다놓을 .maxLines
그리고.scrollbars
xml.xml TextView는 텍스트 뷰입니다.
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:maxLines="5" // any number of max line here.
/>
그리고 자바 코드로.
textView.setMovementMethod(new ScrollingMovementMethod());
ScrollView를 상위 항목으로 사용해야 할 때마다 TextView와 함께 스크롤 이동 방법을 사용합니다.
또한 장치를 가로로 세로로 표시할 때 문제가 발생합니다.전체 페이지를 스크롤할 수 있지만 스크롤 이동 방법이 작동하지 않습니다.
ScrollView를 부모 또는 스크롤 이동 방법으로 사용해야 하는 경우 아래 desc도 사용합니다.
문제가 없으면 TextView 대신 EditText를 사용합니다.
아래 참조:
<EditText
android:id="@+id/description_text_question"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:editable="false"
android:cursorVisible="false"
android:maxLines="6"/>
여기서 텍스트 편집은 텍스트 보기처럼 작동합니다.
그리고 당신의 문제는 해결될 것입니다.
저 같은 경우에는.구속조건 레이아웃.AS 2.3.
코드 구현:
YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());
XML:
android:scrollbars="vertical"
android:scrollIndicators="right|end"
저는 일주일 넘게 이것과 씨름했고 마침내 이것을 작동시키는 방법을 알아냈습니다!
제 문제는 모든 것이 '블록'으로 스크롤된다는 것이었습니다.텍스트 자체가 한 줄씩 스크롤하는 것이 아니라 하나의 덩어리로 스크롤하는 것이었습니다.이것은 분명히 저에게 효과가 없었습니다. 왜냐하면 그것은 아래쪽의 선을 잘라낼 것이기 때문입니다.이전의 모든 솔루션이 저에게 적합하지 않아서 저만의 솔루션을 만들었습니다.
지금까지 가장 쉬운 솔루션은 다음과 같습니다.
클래스 파일 'PerfectScrollable'을 만듭니다.패키지 안에 있는 'TextView'를 선택한 다음 이 코드를 복사하여 붙여넣습니다.
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;
public class PerfectScrollableTextView extends TextView {
public PerfectScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
public PerfectScrollableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
public PerfectScrollableTextView(Context context) {
super(context);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if(focused)
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
@Override
public void onWindowFocusChanged(boolean focused) {
if(focused)
super.onWindowFocusChanged(focused);
}
@Override
public boolean isFocused() {
return true;
}
}
마지막으로 XML에서 'TextView'를 변경합니다.
시작:<TextView
받는 사람:<com.your_app_goes_here.PerfectScrollableTextView
-을 사용할 수 있습니다.android:scrollHorizontally
텍스트가 보기보다 넓을 수 있는지 여부(따라서 수평으로 스크롤할 수 있음).
"true" 또는 "false"와 같은 부울 값일 수 있습니다.
- 프그라칼리마리▁-리 -setHorizontallyScrolling(boolean)
사용해 보십시오.
android:scrollbars = "vertical"
언급URL : https://stackoverflow.com/questions/1748977/making-textview-scrollable-on-android
'programing' 카테고리의 다른 글
Xcode에서 LLDB로 디버깅하는 동안 변수 값을 변경하는 방법은 무엇입니까? (0) | 2023.06.04 |
---|---|
새 GUI를 만들 때 WPF가 Windows Forms보다 선호됩니까? (0) | 2023.06.04 |
오류: gem을 실행하는 동안... (Errno::EPERM) 작업이 허용되지 않습니다. (0) | 2023.06.04 |
배포 인증서/개인 키가 설치되지 않았습니다. (0) | 2023.06.04 |
iPhone/iPad용 Javascript 스크롤 이벤트? (0) | 2023.06.04 |