Android पर TextView स्क्रॉल करने योग्य बनाना


771

मैं एक टेक्स्टव्यू में पाठ प्रदर्शित कर रहा हूं जो एक स्क्रीन में फिट होने के लिए बहुत लंबा प्रतीत होता है। मुझे अपना 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);

जवाबों:


1719

आपको ScrollViewवास्तव में उपयोग करने की आवश्यकता नहीं है ।

बस सेट करें

android:scrollbars = "vertical"

TextViewआपके लेआउट के xml फ़ाइल में आपके गुण ।

फिर उपयोग करें:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

आपके कोड में

बिंगो, यह स्क्रॉल!


96
लेकिन निश्चित रूप से maxLinesआपको एक मनमानी संख्या दर्ज करने की आवश्यकता है; यह ऐसा कुछ नहीं है जो हर स्क्रीन आकार और फ़ॉन्ट आकार के लिए काम करेगा? मुझे यह आसान लगता है कि मैं इसे केवल एक के साथ लपेटता ScrollViewहूं, जिसका अर्थ है कि मुझे आगे एक्सएमएल विशेषताओं या कोड को जोड़ने की आवश्यकता नहीं है (जैसे आंदोलन विधि सेट करना)।
क्रिस्टोफर ऑर

12
@ क्रिस्टोफर, स्क्रॉलव्यू को 'एंड्रॉइड: लेआउट_हाइट' की भी आवश्यकता है।
रेगेक्स रूकी

11
@ रेगेक्स: हाँ। या तो आप ScrollViewटेक-अप को उतनी जगह दें जितना उसे ज़रूरत हो (जैसे android:fillViewportविशेषता के माध्यम से ), या आप विशिष्ट आकार सेट करें जिसे आप चाहते हैं। का उपयोग करते हुए maxLines, यूआई तत्वों के सेट आकारों के लिए नहीं किया जाना चाहिए ताकि कोई समाधान नहीं है।
क्रिस्टोफर ओर्र

62
आपको अधिकतम सीमाएँ परिभाषित करने की आवश्यकता नहीं है। बस बाकी है।
स्टीवनिकस

13
यह स्पष्ट करने के लिए कि हर कोई "चिकनी" स्क्रॉलिंग के बारे में क्या कह रहा है: यदि आप इस विधि का उपयोग करते हैं तो स्क्रॉलिंग वास्तव में "चिकनी" है (इसमें आप पिक्सेल द्वारा पिक्सेल स्क्रॉल कर सकते हैं), हालांकि यह गतिज नहीं है । जैसे ही आप अपनी उंगली को हटाते हैं यह तुरंत स्क्रॉल करना बंद कर देता है - कोई फ़्लर्टिंग नहीं है। यह एक आधुनिक यूआई के लिए बहुत अस्वीकार्य है इसलिए मैं यह सुनिश्चित करने के लिए उत्तर को संपादित करने जा रहा हूं कि अन्य लोग इस "समाधान" पर समय बर्बाद न करें।
टिम्मम्म

310

यह मैंने इसे एक्सएमएल में पूरी तरह से कैसे किया:

<?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. स्क्रॉलव्यू को परिभाषित करते समय, निर्दिष्ट न करें 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());
        }
    });
}

12
उपयोग करने की कोई आवश्यकता नहीं है mTextView.getBottom(), बस विधि का उपयोग करें mScrollView.fullScroll(View.FOCUS_DOWN)क्योंकि यह स्क्रॉल व्यू एपीआई का एक हिस्सा है। अधिक जानकारी के लिए यहां और यहां देखें ।
चुआंगपाम

7
एंड्रॉयड चेतावनी दी है कि या तो LinearLayoutया ScrollViewइस उदाहरण में बेकार हो सकता है (मैं हटाया LinearLayoutपूरी तरह से)। यह भी चेतावनी देता है कि TextView, इसके लिए , इसका android:layout_height="wrap_content"मिलान होना चाहिए ScrollView। ये चेतावनी उन 3 वर्षों के कारण हो सकती है जो इस उत्तर को पोस्ट किए जाने के बाद पारित हुए हैं। भले ही, यह उत्तर चिकनी स्क्रॉलिंग और
फ्लशिंग

Xml फ़ाइल में <!--suppress AndroidLintUselessParent -->ऊपर जोड़ने से ScrollViewउन चेतावनियों का ध्यान रखा जाएगा।
लूई बर्टोन्सिन

एंड्रॉइड एपीआई स्तर 9 में "प्रो टिप" मेरे लिए काम नहीं करता है। टेक्स्टव्यू पाठ को जोड़ने के बाद शीर्ष पर स्क्रॉल किया जाता है।
लार्स

स्वीकार किए गए उत्तर दृष्टिकोण का उपयोग करके यह दृष्टिकोण बहुत बेहतर है, एक चिकनी उपयोगकर्ता अनुभव का उत्पादन नहीं करेगा।
सय्यदरीज़फ़र

120

यह सब वास्तव में आवश्यक है 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);
    }
}

3
क्या XML में इस संपत्ति को सेट करने का कोई तरीका है? मुझे आश्चर्य है कि वे उस विकल्प को क्यों छोड़ देंगे।
थलूर

यह काम करता है लेकिन क्या स्क्रॉल करने के बाद इसे रीफ्रेश करने का कोई तरीका है? मेरा मतलब है कि TextView को स्क्रॉल करने के बाद मैं उस पर टेक्स्ट बदलने जा रहा हूं, लेकिन इसकी स्थिति को स्क्रॉल किया जाता है, भले ही इसकी आवश्यकता न हो। इसका bcose पहले मैंने स्क्रॉल लागू किया था ...
नीरव डांगी

9
कोई स्क्रॉल बार नहीं है, और स्क्रॉलिंग ScrollViewविधि की तुलना में क्लूनी है ।
बजे जेफरी ब्लाटमैन

1
एक के StringBuilderबजाय का उपयोग करें String... जो आपके पास है वह थोड़ा बेकार है।
एलेक्स लॉकवुड

4
यह काम करता है लेकिन स्क्रॉल सुचारू नहीं है। फिर भी धन्यवाद हालांकि काम करता है।
१४:१४ पर शीतदंश

46

इसे जोड़ते हुए अपना टेक्स्टव्यू बनाएं

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

16
यह गतिज स्क्रॉल नहीं करता है। इसका उपयोग न करें।
टिम्मम

3
@ किनेमेटिक स्क्रॉल कैसे प्राप्त करें?
सिरो सेंटिल्ली 冠状 病毒 iro 事件 法轮功 '

आपको एक पाठ के लिए "गतिज स्क्रॉलिंग" नहीं चाहिए, जिसे पढ़ना है।
9 जनवरी को अविश्वसनीय जन

41

इसे लगाना जरूरी नहीं है

android:Maxlines="AN_INTEGER"`

आप बस जोड़कर अपना काम कर सकते हैं:

android:scrollbars = "vertical"

और, इस कोड को अपने जावा वर्ग में रखें:

textview.setMovementMethod(new ScrollingMovementMethod());

स्क्रॉल किए गए आकार बिल्कुल पाठ को फिट करते हैं और आप अंतरिक्ष को बर्बाद नहीं करते हैं, क्योंकि स्वीकार किए गए से बेहतर समाधान।
फ्रैक्टलबोब

जब मैं अभिभावक के रूप में स्क्रॉलव्यू का उपयोग कर रहा हूं, उस समय काम नहीं कर रहा है
प्रिंस

27

आप या तो यह कर सकते हैं

  1. चारों ओर TextViewएक से ScrollView; या
  2. करने के लिए आंदोलन विधि सेट करें ScrollingMovementMethod.getInstance();

22

सबसे अच्छा तरीका मैंने पाया:

इन अतिरिक्त विशेषताओं के साथ TextView को एक EditText से बदलें:

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

स्क्रॉलव्यू में लपेटने की कोई आवश्यकता नहीं है।


2
आसानी से सबसे अच्छा और सबसे उपयुक्त उत्तर, विशेष रूप से यह देखते हुए कि EditText एक टेक्स्ट व्यू उपवर्ग है और सवाल यह है कि टेक्स्टव्यू को स्क्रॉल करने योग्य कैसे बनाया जाए, न कि समस्या के आसपास कैसे काम किया जाए। अगर मैं कर सकता हूं तो दो बार वोट
दूंगा

4
@JustinBuser अधिक असहमत नहीं हो सका। :) यह पूरी तरह से गंभीर है कि यह काम करता है, और इसकी कोई गारंटी नहीं है कि यह एंड्रॉइड के भविष्य के संस्करणों में होगा। यदि आप स्क्रॉल करना चाहते हैं, तो एंड्रॉइड प्रदान करने वाले स्क्रॉलिंग टूल का उपयोग करें। ScrollViewजाने का सही तरीका है।
मद्रब्रेक्स

1
@Madbreaks इसके बारे में "गंभीर" कुछ भी नहीं है, EditText कुछ अतिरिक्त तरीकों और ओवरराइड्स के साथ एक TextView IS है जो विशेष रूप से अलग-अलग लंबाई के पाठ को समायोजित करने के लिए सिलवाया गया है। विशेष रूप से EditText पाठ दृश्य getDefaultMovementMethod फ़ंक्शन के लिए वापसी मान को ओवरराइड करता है। डिफ़ॉल्ट कार्यान्वयन NULL, EditText को मूल रूप से वही करता है जो ये सभी अन्य उत्तर सुझा रहे हैं। जहां तक ​​एंड्रॉइड द्वारा प्रदान किए जाने वाले टूल का उपयोग करने का संबंध है, इन उत्तरों में पाए गए किसी भी अन्य तरीकों की तुलना में EditText वर्ग के कम होने की संभावना है।
जस्टिन बुशर

4
कि हालांकि साथ @JustinBuser मेरे समस्या आप EditText के डिफ़ॉल्ट व्यवहार पर निर्भर करता है कर रहे हैं कि है कि मैं क्या बहुत अच्छी तरह से सड़क के नीचे बदल सकते हैं (सभी नहीं पर कि EditText पदावनत किया जाएगा) का मतलब है। आप यह तर्क दे सकते हैं कि, लेकिन फिर, यह विचार उन घटकों और विशेषताओं का उपयोग करने के लिए है जो कार्य के लिए उपयुक्त हैं। स्क्रॉलव्यू को स्पष्ट रूप से स्क्रॉलिंग को शामिल करने के लिए डिज़ाइन किया गया था। मैं हमेशा कोशिश करता हूं, और हमेशा सुझाव देता हूं कि अन्य लोग नौकरी के लिए सही उपकरण का उपयोग करें। किसी भी प्रोग्रामिंग समस्या के लिए लगभग हमेशा कई दृष्टिकोण होते हैं। वैसे भी, विचारशील प्रतिक्रिया के लिए धन्यवाद।
मैडब्रेक्स 17

16

सरल। मैंने इस तरह से इसे किया:

  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 फ़ाइल के लिए। जैसे ही अधिक पाठ आएगा, यह अपने आप स्क्रॉल डाउन हो जाएगा।

बेशक आपको सेट टेक्स्ट के बजाय एपेंड फ़ंक्शन का उपयोग करके टेक्स्ट जोड़ना होगा:

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

मैंने इसका उपयोग लॉग उद्देश्य के लिए किया था।

आशा है कि ये आपकी मदद करेगा ;)


14

यह केवल 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>

बस...


6
यह भी क्यों लिखें? यह लगभग समान है, यद्यपि यह कम सही है, एक उत्तर का संस्करण जो आपके लिखे जाने से 6 महीने पहले पोस्ट किया गया था।
जस्टिन बसर

11

यह एक स्क्रॉल पट्टी के साथ चिकनी स्क्रॉल पाठ प्रदान करेगा।

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

नीला एनीमेशन सक्षम करता है। सबसे अच्छा जवाब यहाँ IMO।
ग्रिफिन डब्ल्यू।

11

कहीं से ऊपर "प्रो टिप" ( Android पर TextView स्क्रॉल करने योग्य ) बनाना महान काम करता है, हालांकि, अगर आप गतिशील रूप से स्क्रॉलव्यू में पाठ जोड़ रहे हैं तो क्या होगा और उपयोगकर्ता द्वारा होने पर केवल एक परिशिष्ट के बाद स्वचालित रूप से नीचे स्क्रॉल करना चाहेंगे । स्क्रॉल दृश्य के नीचे? (शायद इसलिए कि अगर उपयोगकर्ता ने किसी ऐसी चीज को पढ़ने के लिए स्क्रॉल किया है जिसे आप अपेंड के दौरान अपने आप नीचे की ओर रीसेट नहीं करना चाहते हैं, जो कष्टप्रद होगा।)

वैसे भी, यहाँ यह है:

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

MTextStatus.getLineHeight () इसे बनाएगा ताकि आप स्क्रॉल करेंटॉटकॉम () न करें यदि उपयोगकर्ता स्क्रॉल दृश्य के अंत से एक पंक्ति के भीतर है।


10

यदि आप चाहते हैं कि टेक्स्ट को टेक्स्टव्यू के भीतर स्क्रॉल किया जाए, तो आप निम्नलिखित का अनुसरण कर सकते हैं:

पहले आपको टेक्स्टव्यू को उप-वर्ग करना होगा।

और फिर उस का उपयोग करें।

निम्नलिखित एक उपवर्गित टेक्स्टव्यू का एक उदाहरण है।

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

बस।


7

XML में टेक्स्टव्यू में निम्न जोड़ें।

android:scrollbars="vertical"

और अंत में, जोड़ें

textView.setMovementMethod(new ScrollingMovementMethod());

जावा फ़ाइल में।


1
यह गतिज स्क्रॉल नहीं करता है। इसका प्रयोग न करें।
टिम्मम्म

6

मुझे टेक्स्टिंग स्क्रॉल को 'फ़्लिंग' इशारे का समर्थन करने के लिए नहीं मिला, जहां यह फ़्लिक ऊपर या नीचे स्क्रॉल करने के बाद जारी रहता है। मैंने अपने आप को लागू करना समाप्त कर दिया क्योंकि मैं विभिन्न कारणों से एक स्क्रॉल दृश्य का उपयोग नहीं करना चाहता था, और एक मूवमेंटमेथोड प्रतीत नहीं होता था कि दोनों ने मुझे पाठ का चयन करने और लिंक पर क्लिक करने की अनुमति दी थी।


6
soo ... आपने कैसे जोड़ा इशारे को?
लो मोर्डा

6

पाठ को स्क्रॉल करने योग्य बनाने के लिए कोटलिन में

myTextView.movementMethod= ScrollingMovementMethod()

और xml इस संपत्ति में भी जोड़ें

    android:scrollbars = "vertical"

5

जब आप स्क्रॉल करने योग्य हों, तो इस लाइन को व्यू की अंतिम पंक्ति में तब जोड़ें जब आप दृश्य में कुछ भी दर्ज करें:

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

यार, टेबलस्क्रोलर एक दृश्य है जो कि XML से आईडी विशेषता द्वारा पहचाना गया था .. में यू की कोशिश करो .. यह ठीक काम करेगा .. इसके काम मुझे fr ..
राहुल बारादिया

4

यदि आप EditText समाधान का उपयोग नहीं करना चाहते हैं, तो आपके पास बेहतर किस्मत हो सकती है:

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

4

इसे अपने 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());

2
यह गतिज स्क्रॉल नहीं करता है। इसका प्रयोग न करें।
टिम्मम

मैं अंत पाठ को ग्रहण नहीं करना चाहता। मैं यह कैसे करुं।
सागर नायक

@ सागरनायक एंड्रॉइड का उपयोग करें: ellipsize = "कोई नहीं"
फ्रांसिस

2

नीचे दिया गया कोड एक स्वचालित क्षैतिज स्क्रॉलिंग टेक्स्टव्यू बनाता है:

जबकि TextView जोड़ने के लिए xml का उपयोग करें

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

निम्नलिखित में TextView के गुण देखें ()

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


1

इसे इस तरह इस्तेमाल करें

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

0

मेरे मामले में। कॉनस्ट्रेट लेआउट। 2.3।

कोड कार्यान्वयन:

YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());

एक्सएमएल:

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

0

मैं एक सप्ताह से अधिक समय तक इससे जूझता रहा और आखिरकार यह पता लगा लिया कि यह काम कैसे करना है!

मेरा मुद्दा यह था कि सब कुछ एक 'ब्लॉक' के रूप में स्क्रॉल होगा। पाठ स्वयं स्क्रॉल कर रहा था, लेकिन लाइन के बजाय लाइन के रूप में। यह स्पष्ट रूप से मेरे लिए काम नहीं करता था, क्योंकि यह सबसे नीचे की रेखाओं को काट देगा। पिछले सभी समाधानों ने मेरे लिए काम नहीं किया, इसलिए मैंने खुद को तैयार किया।

यहाँ अब तक का सबसे आसान उपाय है:

एक क्लास फ़ाइल बनाएं: पैकेज के अंदर '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


1
100% सही जवाब। जैसा आपने वर्णन में उल्लेख किया है, मैंने उसी मुद्दे का सामना किया। कई समाधान लागू करें लेकिन पूरी तरह से काम नहीं करते हैं। लेकिन आपका समाधान हर मामले में पूरी तरह से काम कर रहा है। मेरा समय बचाने के लिए :) धन्यवाद
Daxesh Vekariya

@DaxeshVekariya खुशी है कि यह आपके लिए काम किया!
पेट्रो

0

रखो maxLinesऔर scrollbarsxml में 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());


0

मुझे यह समस्या तब हुई जब मैं 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;
            }
        });

0

जब भी आपको पेरेंट के रूप में स्क्रॉलव्यू का उपयोग करने की आवश्यकता हो , और आप पाठ दृश्य के साथ स्क्रॉल आंदोलन विधि का भी उपयोग करते हैं।

और जब आप अपने डिवाइस को लैंडस्केप करने के लिए पोर्ट्रेट करते हैं तो उस समय कुछ समस्या आती है । (जैसे) पूरा पृष्ठ स्क्रॉल करने योग्य है, लेकिन स्क्रॉल आंदोलन विधि काम नहीं कर सकती है।

अगर आपको अभी भी स्क्रॉलव्यू को माता-पिता या स्क्रॉल आंदोलन विधि के रूप में उपयोग करने की आवश्यकता है, तो आप नीचे 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 की तरह व्यवहार करता है

और आपकी समस्या का समाधान हो जाएगा


0

XML - आप उपयोग कर सकते हैं android:scrollHorizontally विशेषता का

क्या पाठ को दृश्य से व्यापक होने की अनुमति है (और इसलिए क्षैतिज रूप से स्क्रॉल किया जा सकता है)।

एक बूलियन मान हो सकता है, जैसे "सच" या "गलत"।

प्राग्रामैक्ली - setHorizontallyScrolling(boolean)


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.