TextViewをAndroidでスクロール可能にする

14985 ワード

私がtextviewに表示したテキストは長すぎて、1つの画面に収容できません.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);

1階
これはXMLのみを使用した「ScrollBarをTextViewに適用する方法」です.
まずmainでxmlファイルにTextviewコントロールを使用し、テキストをいくつか書き込みます.


次に、テキストビューコントロールをスクロールビューの間に配置して、テキストのスクロールバーを表示します.


    

        

    


ただ...
2階
スクロール可能な操作が完了したら、ビューに任意の内容を入力します.この行をビューの最後の行に追加します.
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);

#3階
EditTextソリューションを使用したくない場合は、次の方法がより良い場合があります.
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourLayout);
    (TextView)findViewById(R.id.yourTextViewId).setMovementMethod(ArrowKeyMovementMethod.getInstance());
}

#4階
これにより、スクロールバー付きのスムーズなスクロールテキストが提供されます.
ScrollView scroller = new ScrollView(this);
TextView tv = new TextView(this);
tv.setText(R.string.my_text);
scroller.addView(tv);

#5階
テキストをtextviewでスクロールする場合は、次の操作を行います.
まずtextviewを継承する必要があります.
そしてそれを使います.
以下に、サブクラス化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でこの方法で使用する必要があります.
 

ただです.
#6階
上の「誰かのどこか」(TextViewをAndroidでスクロール可能にする)の「プロフェッショナルヒント」は効果的ですが、ScrollViewにテキストを動的に追加し、ユーザーがいる場合にのみ追加後に自動的に最後までスクロールしたい場合はどうすればいいですか?ScrollViewの下部?(ユーザーがスクロールしてコンテンツを読む場合、追加中に自動的に最後までリセットしたくないため、煩わしいためかもしれません.)
いずれにしても、ここは:
if ((mTextStatus.getMeasuredHeight() - mScrollView.getScrollY()) <=
        (mScrollView.getHeight() + mTextStatus.getLineHeight())) {
    scrollToBottom();
}

mTextStatusを使用します.getLineHeight()は、ユーザーがScrollViewの末尾の行にいる場合は、ToBottom()にスクロールしないようにすることができます.
#7階
textviewにこれだけ追加する
TextView textview= (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(new ScrollingMovementMethod());

#8階
君はできる
  • ScrollViewTextViewを包囲する.または
  • MovementメソッドをScrollingMovementMethod.getInstance();に設定します.

  • #9階
    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());
    

    #10階
    XMLのテキストビューに次の内容を追加します.
    android:scrollbars="vertical"
    

    最後に、追加
    textView.setMovementMethod(new ScrollingMovementMethod());
    

    Javaファイルにあります.
    #11階
    私はそのために1週間以上奮闘して、やっとそれをどのように仕事をさせる方法を考え出しました!
    私の問題は、すべてのコンテンツが「ブロック」にスクロールされることです.テキスト自体はスクロール中ですが、行単位ではなくスクロール表示されます.これは明らかに私には役に立たない.底の線を切るからだ.以前のすべてのソリューションは私に適用されなかったので、自分で自分のソリューションを作りました.
    これまでで最も簡単な解決策です.
    パッケージ内に「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」を変更します.
    由来: 到着: #12階
    実際にはScrollViewを使用する必要はありません.
    設定するだけ
    android:scrollbars = "vertical"
    

    レイアウトされたxmlファイルのTextViewプロパティ.
    次に、次の操作を行います.yourTextView.setMovementMethod(new ScrollingMovementMethod());
    コードにあります.
    ビンゴゲーム、スクロール!
    #13階
    簡単です.これは私の方法です.
  • XML面:
         
  • Java側:
     tv_log = (TextView) findViewById(R.id.tv_log); tv_log.setMovementMethod(new ScrollingMovementMethod()); 
  • ボーナス:
    テキストの入力時にテキストビューを下にスクロールするには、次の項目を追加する必要があります.
        android:gravity="bottom"
    

    TextView xmlファイルに移動します.より多くのテキストが入力されると、自動的に下にスクロールされます.
    もちろん、設定テキストではなくappend関数を使用してテキストを追加する必要があります.
        tv_log.append("
    " + text);

    ログの目的で使用します.
    これが役に立つことを願っています.
    #14階
    入れる必要はない
    android:Maxlines="AN_INTEGER"`
    

    次の内容を追加するだけで作業が完了します.
    android:scrollbars = "vertical"
    

    次に、Javaクラスに次のコードを入れます.
    textview.setMovementMethod(new ScrollingMovementMethod());
    

    #15階
    次のコードは、自動水平スクロールtextviewを作成します.
    xtViewをxmlに追加するときに使用
    
    

    onCreate()でTextViewの次のプロパティを設定します.
    tv.setSelected(true);
    tv.setHorizontallyScrolling(true); 
    

    #16階
    このように使う
    
    

    #17階
    私にとって、コンストレイントレイアウト、AS 2.3.
    コード実装:
    YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());
    

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

    #18階maxLinesおよびscrollbarsをxmlのTextViewに配置する.
    
    

    そしてJavaコードで.textView.setMovementMethod(new ScrollingMovementMethod());
    #19階ScrollViewTextViewを使用したときにこの問題に遭遇しました.この解決策は私に役に立つ.
    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;
                }
            });
    

    #20階
    親としてScrollViewを使用する必要があるたびに、スクロール移動方法をTextViewとともに使用することもできます.
    デバイスを縦に横に配置すると、いくつかの問題が発生します.たとえば、ページ全体がスクロール可能ですが、スクロール移動方法は無効です.
    親またはスクロール移動メソッドとしてScrollViewを使用する必要がある場合は、次のdescも使用できます.
    問題がない場合は、TextViewの代わりにEditTextを使用します.
    以下を参照:
    
    

    ここで、EditTextの動作はTextViewに似ています.
    お客様の問題は解決されます.
    #21階
    XML-android:scrollHorizontallyプロパティを使用できます
    テキストがビューよりも広いことを許可するかどうか(水平にスクロールできます).
    「true」や「false」などのブール値が使用できます.
    Prigramacaly- setHorizontallyScrolling(boolean)
    #22階
    これを試します.
    android:scrollbars = "vertical"
    

    #23階
    Kotlinではtextviewをスクロール可能にする
    myTextView.movementMethod= ScrollingMovementMethod()
    

    xmlにこのプロパティを追加
        android:scrollbars = "vertical"
    

    #24階
    本当に必要なのはsetMovementMethod()です.LinearLayoutを使用した例です.
    ファイルmain.xml
    
    
    
    
    

    ファイル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) + "
    "; } tv1.setMovementMethod(new ScrollingMovementMethod()); tv1.setText(s); } }

    #25階
    「反転」ジェスチャーをサポートするTextViewスクロールは見つかりませんでした.このジェスチャーは、上または下にスライドした後もスクロールし続けます.私は最終的に自分でそれを実現しました.いろいろな理由でScrolViewを使用したくないし、MovementMethodがテキストを選択してリンクをクリックすることを許可していないようです.
    #26階
    これが私が純粋にXMLでやった方法です.
    
    
    
        
    
            
        
    
    

    メモ:
  • android:fillViewport="true"android:layout_weight="1.0" android:fillViewport="true"を組み合わせて使用すると、textviewはすべての利用可能なスペースを占有します.
  • Scrollviewを定義する場合は、android:layout_height="fill_parent"を指定しないでください.そうしないとscrollviewは無効です.(これでさっき1時間も無駄にしました!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());
            }
        });
    }
    

    #27階
    私が見つけた最善の方法は:
    次のような追加属性を持つEditTextを使用してTextViewを置き換えます.
    android:background="@null"
    android:editable="false"
    android:cursorVisible="false"
    

    ScrollViewにパッケージする必要はありません.