Текст выделения в Android - PullRequest
       28

Текст выделения в Android

57 голосов
/ 02 февраля 2010

Как я могу использовать выделенный текст в приложении для Android?

Ответы [ 15 ]

121 голосов
/ 30 августа 2010

Вот пример:

public class TextViewMarquee extends Activity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) this.findViewById(R.id.mywidget);  
        tv.setSelected(true);  // Set focus to the textview
    }
}

XML-файл с textview:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/mywidget"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:maxLines="1"
        android:ellipsize="marquee"
        android:fadingEdge="horizontal"
        android:marqueeRepeatLimit="marquee_forever"
        android:scrollHorizontally="true"
        android:textColor="#ff4500"
        android:text="Simple application that shows how to use marquee, with a long text" />
</RelativeLayout>
24 голосов
/ 12 июля 2011
TextView textView = (TextView) this.findViewById(R.id.textview_marquee);  
textView.setEllipsize(TruncateAt.MARQUEE);
textView.setText("General Information... general information... General Information");
textView.setSelected(true);
textView.setSingleLine(true);
22 голосов
/ 02 февраля 2010
android:ellipsize="marquee"

Это работает только тогда, когда ваш TextView имеет фокус.

10 голосов
/ 16 августа 2012

Чтобы заставить это работать, мне пришлось использовать ВСЕ три вещи (ellipsize, selected и singleLine), которые уже упоминались:

TextView tv = (TextView)findViewById(R.id.someTextView);
tv.setSelected(true);
tv.setEllipsize(TruncateAt.MARQUEE);
tv.setSingleLine(true):
8 голосов
/ 07 августа 2013

Просто поместите эти параметры в ваш TextView - Это работает: D

android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true"

И тебе тоже нужно setSelected(true):

my_TextView.setSelected(true);

Привет, Christopher

8 голосов
/ 01 августа 2013

XML-код

 <TextView
            android:id="@+id/txtTicker"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center_horizontal"
            android:ellipsize="marquee"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:freezesText="true"
            android:gravity="center_horizontal"
            android:marqueeRepeatLimit="marquee_forever"
            android:paddingLeft="5dip"
            android:paddingRight="5dip"
            android:scrollHorizontally="true"
            android:shadowColor="#FF0000"
            android:shadowDx="1.5"
            android:shadowDy="1.3"
            android:shadowRadius="1.6"
            android:singleLine="true"
            android:textColor="@android:color/white"
            android:textSize="20sp"
            android:textStyle="bold" >
        </TextView>

Java

txtEventName.setSelected(true);

если текст маленький, добавить пробел до и после текста

txtEventName.setText("\t \t \t \t \t \t"+eventName+"\t \t \t \t \t \t");
7 голосов
/ 25 июня 2015

Я обнаружил проблему с marquee, что он не может быть использован для коротких строк (так как он предназначен только для показа длинных строк).

Я предлагаю использовать Webview, если вы хотите перемещать короткие строки по горизонтали. Main_Activity.java код: `

        WebView webView;

        webView = (WebView)findViewById(R.id.web);


        String summary = "<html><FONT color='#fdb728' FACE='courier'><marquee behavior='scroll' direction='left' scrollamount=10>"
                + "Hello Droid" + "</marquee></FONT></html>";

        webView.loadData(summary, "text/html", "utf-8"); // Set focus to the textview
`

main_activity.xml код:

<WebView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/web"
        ></WebView>
2 голосов
/ 15 марта 2017

Добавить код ниже в XML

    <TextView
    android:text="Shops NearBy textdf fsdgsdgsdg dsgtsgsdgsdgsg"
    android:id="@+id/txtEventName"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit ="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:scrollHorizontally="true"
    android:singleLine="true"/>

В Java добавьте следующий код:

    TextView txtEventName=(TextView)findViewById(R.id.txtEventName);
    txtEventName.setSelected(true);
2 голосов
/ 09 мая 2011

Как и настройки XML, определенные droidgren, мои тесты показали, что если текст, который вы хотите отобразить, короче ширины текстового представления, то выделение не будет прокручиваться вообще. Возможные решения состоят в том, чтобы установить ширину представления на размер, меньший, чем длина текста, или объединить строку в себя 2 или 3 раза, возможно, с подходящим пробелом между ними, чтобы прокрутка выглядела нормально.

1 голос
/ 18 апреля 2018

В XML-файле вам нужно добавить следующие дополнительные атрибуты в TextView, чтобы получить функцию, похожую на выделение:

android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"

В файле MainActivity.java вы можете получить ссылку на этот TextView, используя findViewById (), и вы можете установить следующее свойство для этого TextView, чтобы он выглядел как текст выделенного текста:

setSelected(true);

Это все, что тебе нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...