android - एंड्रॉइड पर TextView स्क्रॉल करने योग्य बनाना




scroll android-textview (14)

मैं एक टेक्स्टव्यू में टेक्स्ट प्रदर्शित कर रहा हूं जो एक स्क्रीन में फ़िट होने में बहुत लंबा लगता है। मुझे अपना टेक्स्टव्यू स्क्रॉल करने योग्य बनाना है। मैं उसे कैसे कर सकता हूँ?

यहां कोड है:

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. एक TextView द्वारा TextView को घेरे; या
  2. आंदोलन विधि को ScrollingMovementMethod.getInstance(); सेट करें ScrollingMovementMethod.getInstance();

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

बस सेट करें

android:maxLines = "AN_INTEGER"

android:scrollbars = "vertical"

अपने लेआउट की एक्सएमएल फ़ाइल में अपने TextView गुण।

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

yourTextView.setMovementMethod(new ScrollingMovementMethod());

आपके कोड में

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


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

<?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" के साथ संयुक्त android:fillViewport="true" android:layout_weight="1.0" टेक्स्टव्यू को सभी उपलब्ध स्थान ले जाएगा।

  2. स्क्रॉलव्यू को परिभाषित करते समय, android:layout_height="fill_parent" निर्दिष्ट न करें android:layout_height="fill_parent" अन्यथा android:layout_height="fill_parent" काम नहीं करता है! (इसने मुझे अभी एक घंटे बर्बाद कर दिया है! एफएफएस)।

प्रो टिप:

पाठ जोड़ने के बाद प्रोग्रामेटिक रूप से नीचे स्क्रॉल करने के लिए, इसका उपयोग करें:

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());
        }
    });
}

इसमें रखना जरूरी नहीं है

android:Maxlines="AN_INTEGER"`

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

android:scrollbars = "vertical"

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

textview.setMovementMethod(new ScrollingMovementMethod());

एक्सएमएल में टेक्स्टव्यू में निम्नलिखित जोड़ें।

android:scrollbars="vertical"

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

textView.setMovementMethod(new ScrollingMovementMethod());

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


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

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

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

MTextStatus.getLineHeight () ऐसा करेगा ताकि आप स्क्रॉलव्यू के अंत से एक पंक्ति के भीतर हों तो ToBottom () को स्क्रॉल न करें।


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

Xml उपयोग में TextView जोड़ते समय

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

टेक्स्ट व्यू के निम्नलिखित गुणों को ऑनक्रेट () पर सेट करें

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

बस अपना टेक्स्टव्यू इसे जोड़ना

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

मुझे सबसे अच्छा तरीका मिला:

इन अतिरिक्त विशेषताओं के साथ टेक्स्ट व्यू को एडिटटेक्स्ट के साथ बदलें:

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

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


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

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

YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());

एक्सएमएल:

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

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

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

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

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

और फिर इसका इस्तेमाल करें।

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

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

अब, आपको इस तरह एक्सएमएल में इसका उपयोग करना होगा:

 <com.yourpackagename.AutoScrollableTextView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="This is very very long text to be scrolled"
 />

बस।


यह केवल एक्सएमएल का उपयोग करते हुए, "अपने टेक्स्ट व्यू में स्क्रॉलबार को कैसे लागू करें" है।

सबसे पहले, आपको 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>

बस...


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






android-textview