문제

하나의 화면에 맞지 않는 텍스트 뷰에 텍스트를 표시하고 있습니다. 텍스트 뷰를 스크롤 할 수 있도록해야합니다. 어떻게 할 수 있습니까?

코드는 다음과 같습니다.

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>

메모:

  1. android:fillViewport="true" 결합 android:layout_weight="1.0" TextView가 사용 가능한 모든 공간을 차지하게됩니다.

  2. ScrollView를 정의 할 때는 지정하지 마십시오 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 ()입니다. 다음은 LinearLayout을 사용하는 예입니다.

파일 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());

당신도 할 수 있습니다

  1. 둘러싸 TextView a ScrollView; 또는
  2. 이동 방법을 설정하십시오 ScrollingMovementMethod.getInstance();.

내가 찾은 가장 좋은 방법 :

TextView를 EditText로 이러한 추가 속성으로 바꾸십시오.

android:background="@null"
android:editable="false"
android:cursorVisible="false"

스크롤 뷰에서 포장이 필요하지 않습니다.

XML 만 사용하여 "TextView에 스크롤 바를 적용하는 방법"입니다.

먼저, 텍스트 뷰 컨트롤을 main.xml 파일을 제출하고 텍스트를 작성하십시오.

<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>

그게 다야 ...

단순한. 이것이 내가 한 방법입니다.

  1. 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>
    
  2. 자바 측 :

    tv_log = (TextView) findViewById(R.id.tv_log);
    tv_log.setMovementMethod(new ScrollingMovementMethod());
    

보너스:

텍스트보기가 텍스트를 채우면 아래로 스크롤하려면 다음을 추가해야합니다.

    android:gravity="bottom"

TextView XML 파일에 더 많은 텍스트가 들어 오면 자동으로 아래로 스크롤됩니다.

물론 설정 텍스트 대신 Append 함수를 사용하여 텍스트를 추가해야합니다.

    tv_log.append("\n" + text);

로그 목적으로 사용했습니다.

이게 도움이 되길 바란다 ;)

어딘가에있는 누군가의 위의 "프로 팁"(Android에서 텍스트 뷰를 스크롤 할 수 있습니다) 그러나 잘 작동하지만 스크롤 뷰에 텍스트를 동적으로 추가하고 추가 후 하단으로 스크롤하려면 어떻게해야합니까? 사용자가 스크롤 뷰의 맨 아래에있을 때? (아마도 사용자가 스크롤하여 내용을 읽었을 때 부록 중에 자동으로 하단으로 재설정하고 싶지 않아 성가시기 때문일 수 있습니다.)

어쨌든 여기에 있습니다.

if ((mTextStatus.getMeasuredHeight() - mScrollView.getScrollY()) <=
        (mScrollView.getHeight() + mTextStatus.getLineHeight())) {
    scrollToBottom();
}

mtextStatus.getLineHeight ()는 사용자가 스크롤 뷰의 끝에서 한 줄 내에있는 경우 스크롤 작업 ()을 스크롤 트토 봇 톰 ()하지 않도록 만듭니다.

이것은 스크롤 막대와 함께 부드러운 스크롤 텍스트를 제공합니다.

ScrollView scroller = new ScrollView(this);
TextView tv = new TextView(this);
tv.setText(R.string.my_text);
scroller.addView(tv);

TextView 내에서 텍스트를 스크롤하려면 다음을 따를 수 있습니다.

먼저 텍스트 뷰를 서브 클래스해야합니다.

그리고 그것을 사용하십시오.

다음은 서브 클래스 텍스트 뷰의 예입니다.

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"
 />

그게 다야.

나는 '플링'제스처를 지원하기 위해 TextView 스크롤을 찾지 못했습니다. 여러 가지 이유로 스크롤 뷰를 사용하고 싶지 않았기 때문에 직접 구현하게되었으며, 텍스트를 선택하고 링크를 클릭 할 수있는 움직임 방법이없는 것 같습니다.

XML의 TextView에 다음을 추가하십시오.

android:scrollbars="vertical"

마지막으로 추가하십시오

textView.setMovementMethod(new ScrollingMovementMethod());

Java 파일에서.

스크롤 가능성이 완료되면보기에 무엇이든 입력 할 때이 줄을 뷰의 마지막 줄에 추가하십시오.

((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);

이것을 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());

EditText 솔루션을 사용하지 않으려면 다음과 같은 운이 좋을 수 있습니다.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourLayout);
    (TextView)findViewById(R.id.yourTextViewId).setMovementMethod(ArrowKeyMovementMethod.getInstance());
}

아래 코드는 자동 수평 스크롤 텍스트 뷰를 만듭니다.

XML 사용에 TextView를 추가하는 동안

<TextView android:maxLines="1" 
          android:ellipsize="marquee"
          android:scrollHorizontally="true"/>

oncreate ()에서 다음 텍스트 뷰 속성을 설정하십시오.

tv.setSelected(true);
tv.setHorizontallyScrolling(true); 

이렇게 사용하십시오

<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:maxLines = "AN_INTEGER"
    android:scrollbars = "vertical"
/>

Kotlin에서 TextView를 스크롤 할 수 있도록합니다

myTextView.movementMethod= ScrollingMovementMethod()

또한이 속성을 XML에 추가하십시오

    android:scrollbars = "vertical"

제 경우에는 제약 레이아웃이 2.3입니다.

코드 구현 :

YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());

XML :

android:scrollbars="vertical"
android:scrollIndicators="right|end"

놓다 maxLines 그리고 scrollbars XML의 텍스트 뷰 내부.

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="vertical"
    android:maxLines="5" // any number of max line here.
    />

그런 다음 Java 코드로.

textView.setMovementMethod(new ScrollingMovementMethod());

사용했을 때이 문제가있었습니다 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;
            }
        });

필요할 때마다 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"/>

여기에서 edittext는 TextView처럼 작동합니다

그리고 당신의 문제는 해결 될 것입니다

XML- 사용할 수 있습니다 android:scrollHorizontally 기인하다

텍스트가보기보다 넓어 지는지 여부 (따라서 가로로 스크롤 될 수 있음).

"true"또는 "false"와 같은 부울 가치 일 수 있습니다.

Prigramacaly- setHorizontallyScrolling(boolean)

이 시도:

android:scrollbars = "vertical"

나는 일주일 이상 이것으로 어려움을 겪고 마침내이 일을하는 방법을 알아 냈습니다!

내 문제는 모든 것이 '블록'으로 스크롤한다는 것입니다. 텍스트 자체는 스크롤되었지만 줄별로 라인이 아닌 청크로 사용되었습니다. 이것은 바닥에서 선을 잘라 내기 때문에 분명히 나에게 효과가 없었습니다. 이전의 모든 솔루션은 나에게 효과가 없었으므로 내 자신을 만들었습니다.

가장 쉬운 솔루션은 다음과 같습니다.

패키지 내부에서 'PerfectScrollableTextView'라는 클래스 파일을 만든 다음이 코드를 복사하여 다음에 붙여 넣습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top