android - جعل TextView التمرير على الروبوت




scroll android-textview (14)

أضف ما يلي في النص في XML.

android:scrollbars="vertical"

وأخيرًا ، أضف

textView.setMovementMethod(new ScrollingMovementMethod());

في ملف جافا.

أقوم بعرض النص في عرض نصي يبدو طويلاً جدًا بحيث لا يمكن ملاءمته في شاشة واحدة. أحتاج إلى جعل برنامج 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);

أضف هذا إلى تنسيق 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());

أنا ناضلت مع هذا لأكثر من أسبوع ، وأخيرا أحسب كيفية جعل هذا العمل!

كانت مشكلتي هي أن كل شيء سوف يتم التمرير على شكل "كتلة". كان النص نفسه يتم التمرير ، ولكن كمقطع بدلاً من خط تلو الآخر. من الواضح أن هذا لم ينجح بالنسبة لي ، لأنه سيقطع الخطوط في الأسفل. لم تنجح جميع الحلول السابقة بالنسبة لي ، لذا فقد قمت بصياغة هذه الحلول الخاصة بي.

هنا هو الحل الأسهل بكثير:

أنشئ ملفًا للفصل يسمى: "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;
    }
}

وأخيرا ، قم بتغيير "TextView" الخاص بك في XML:

من: <TextView

إلى: <com.your_app_goes_here.PerfectScrollableTextView


إذا كنت تريد تمرير النص داخل عرض النص ، فيمكنك اتباع ما يلي:

أولاً ، يجب أن يكون لديك نص من فئة فرعية.

ثم استخدم ذلك.

فيما يلي مثال على عرض نصي تحت فئة فرعية.

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  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:maxLines = "AN_INTEGER"
    android:scrollbars = "vertical"
/>

بسيط. هكذا فعلت ذلك:

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

اعتدت عليه لغرض السجل.

آمل أن يساعد هذا ؛)


سيوفر هذا النص التمرير السلس مع شريط التمرير.

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

عند الانتهاء من التمرير ، أضف هذا السطر إلى السطر الأخير في العرض عند إدخال أي شيء في العرض:

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

كل ما هو ضروري حقا هو 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);
    }
}

لست بحاجة إلى استخدام ScrollView الواقع.

مجرد ضبط

android:maxLines = "AN_INTEGER"

android:scrollbars = "vertical"

خصائص TextView في ملف xml الخاص TextView .

ثم استخدام:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

في شفرتك.

البنغو ، انها مخطوطات!


ليس من الضروري وضع

android:Maxlines="AN_INTEGER"`

يمكنك القيام بعملك ببساطة عن طريق إضافة:

android:scrollbars = "vertical"

و ضع هذا الكود في صف جافا الخاص بك:

textview.setMovementMethod(new ScrollingMovementMethod());

هذا هو "كيفية تطبيق ScrollBar إلى TextView الخاص بك" ، باستخدام 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>

هذا هو...


يعمل "الطرف الموالي" أعلاه من Someone Somewhere ( جعل TextView قابل للتمرير على Android ) رائعًا ، ولكن ماذا لو كنت تضيف نصًا إلى ScrollView ديناميكيًا وترغب في التمرير تلقائيًا إلى الأسفل بعد الإلحاق فقط عندما يكون المستخدم في الجزء السفلي من ScrollView؟ (ربما لأنه إذا قام المستخدم بالتمرير لقراءة شيء ما لا تريد إعادة تعيينه تلقائيًا إلى أسفل أثناء الإلحاق ، والذي سيكون مزعجًا.)

على أي حال ، هنا هو:

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

سوف تجعله mTextStatus.getLineHeight () بحيث لا scrollToBottom () إذا كان المستخدم ضمن سطر واحد من نهاية ScrollView.


يعمل الكود أدناه على إنشاء عرض نص تلقائي أفقي للتمرير:

أثناء إضافة TextView إلى xml

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

قم بتعيين الخصائص التالية لـ TextView في onCreate ()

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




android-textview