Возможно ли для TextView Marquee в виджете, который расширяет AppWidgetProvider?

Я очень новичок в программировании для Android, и я читал везде, и я не могу найти никакого решения.

Основная проблема заключается в том, что у меня есть TextView в виджете, и я хотел бы, чтобы текст прокручивался, когда текст длиннее, чем TextView layout_width. Это мой код в layout_widget.xml

    <TextView android:id="@+id/fact" android:layout_width="200dp"
            android:text="Loading... More text to see if it spans or not and want more"
            android:singleLine="true" 
            android:ellipsize="marquee"
            android:marqueeRepeatLimit ="marquee_forever"
            android:scrollHorizontally="true"
            android:focusable="true"
            android:focusableInTouchMode="true" />

Теперь я прочитал, что мне нужно сделать так, чтобы TextView был в фокусе, что я и сделал. Я также читал, что вам нужно установить свойство setSelected(true), и именно здесь я изо всех сил пытаюсь установить. В моем действии по умолчанию (в AndroidManifest.xml) у меня есть следующий код.

            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.widget_layout);
                findViewById(R.id.fact).setSelected(true);
                setContentView(R.layout.main);
            }

Приведенная ниже часть используется для установки содержимого в widget_layout.xml, а затем для свойства TextView для setSelected устанавливается значение true.

                setContentView(R.layout.widget_layout);
                findViewById(R.id.fact).setSelected(true);

Затем я возвращаю ContentView обратно в main.xml

Теперь я предполагаю, что это неправильно, и это не так, как это должно быть сделано. Но мне интересно, можно ли это сделать. Я также читал, что если вы можете переопределить Framework, вы можете добавить свои собственные свойства, например ScrollView, это тоже правильно? Также я на SDK версии 7.

Я очень ценю помощь, которую я получаю, спасибо всем!

Изменить: удалив setContentView(R.layout.main); при запуске приложения через отрисовку приложения текст прокручивается, а виджет – нет. Вид приводит меня к тому, что у виджета не может быть бегущей строки??? У кого-нибудь есть бегущая строка, работающая над виджетом??

Edit2: решено. Вот как это делается

В xml для текстового представления вам нужен тег. В основном я думаю, что это то же самое, что и getSeleted(true);

Таким образом, код должен быть следующим:

    <TextView android:id="@+id/fact" android:layout_width="200dp"
            android:text="Loading... More text to see if it spans or not and want more"
            android:singleLine="true" 
            android:ellipsize="marquee"
            android:marqueeRepeatLimit ="marquee_forever"
            android:scrollHorizontally="true"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:duplicateParentState="true">
        <requestFocus android:focusable="true" android:focusableInTouchMode="true"
            android:duplicateParentState="true" />
    </TextView>

person Springy    schedule 23.10.2011    source источник
comment
Добро пожаловать в Stack Overflow! Пожалуйста, не забудьте принять ответ, если он решит вашу проблему.   -  person Paul Burke    schedule 24.10.2011
comment
ура, но решение не работает   -  person Springy    schedule 25.10.2011
comment
это действительно работает для вас? потому что я не могу заставить его работать...   -  person Paul    schedule 14.01.2013
comment
Оно работает. Но виджет IF имеет два текстовых представления, прокручивается только одно текстовое представление... Как я могу прокручивать все текстовые представления?   -  person ChangUZ    schedule 25.09.2013
comment
Часть requestFocus должна читаться только <requestFocus />   -  person Giszmo    schedule 29.09.2013


Ответы (2)


Решено. Вот как это делается

В xml для текстового представления вам нужен тег. В основном я думаю, что это то же самое, что и getSeleted(true);

Таким образом, код должен быть следующим:

<TextView android:id="@+id/fact" android:layout_width="200dp"
        android:text="Loading... More text to see if it spans or not and want more"
        android:singleLine="true" 
        android:ellipsize="marquee"
        android:marqueeRepeatLimit ="marquee_forever"
        android:scrollHorizontally="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:duplicateParentState="true">
    <requestFocus android:focusable="true" android:focusableInTouchMode="true"
        android:duplicateParentState="true" />
</TextView>
person Springy    schedule 29.10.2011
comment
Это отлично работает! Однако это прерывает мое событие щелчка, у меня есть текстовое представление, перекрывающее ImageView внутри RelativeLayout. Любые идеи, как это решить? - person Jonathan Andersson; 07.01.2014
comment
Не слишком уверен, может быть, вам нужно ограничить размеры. - person Springy; 07.01.2014

Вы звоните setContentView дважды:

setContentView(R.layout.widget_layout);
findViewById(R.id.fact).setSelected(true);
setContentView(R.layout.main);

У вашей активности может быть только один макет. Если widget_layout — это макет вашего виджета, который включает текстовое представление, то вам не нужен второй setContentView.

person goto10    schedule 23.10.2011
comment
Да, я знаю. Насколько я понимаю (и, возможно, неправильно, я мог бы сказать), когда вы нажимаете на приложение в рисовании приложения, это открывает действие, связанное с AndroidManifest. Теперь в этом действии я хочу использовать main.xml. У меня проблема в том, что мне нужно использовать класс Activity, где onCreate() вызывается там, где он просматривает содержимое layout_widget.xml. Вот почему я сначала вызвал layout_widget, чтобы я мог установить свойство для layout_widget, а затем вернуть его обратно к содержимому. Я знаю, что это звучит неправильно, но я не знаю, как это сделать по-другому... - person Springy; 24.10.2011
comment
Привет, я разобрался с проблемой. Проводка. Редактирование поста выше о том, как это достижимо. - person Springy; 30.10.2011