扩展 AppWidgetProvider 的 Widget 中是不是可以使用 TextView Marquee?

Posted

技术标签:

【中文标题】扩展 AppWidgetProvider 的 Widget 中是不是可以使用 TextView Marquee?【英文标题】:Is it possible for TextView Marquee in a Widget that extends AppWidgetProvider?扩展 AppWidgetProvider 的 Widget 中是否可以使用 TextView Marquee? 【发布时间】:2011-12-13 16:50:23 【问题描述】:

我对 android 编程非常陌生,我到处阅读,但似乎找不到任何解决方案。

基本问题是我在小部件中有一个 TextView,我希望当文本长于 TextView 布局宽度时滚动文本。这是我在 layout_widget.xml 中的代码

    <TextView android:id="@+id/fact" android:layout_
            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);
            

下面的部分用于将Content设置为widget_layout.xml,然后将setSelected的TextView属性设置为true

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

然后我将 ContentView 返回到 main.xml

现在我猜这是错误的,这不是应该的方式。但我想知道是否可以做到。我还读到如果您可以覆盖框架,您可以将自己的属性放入其中,例如 ScrollView,这也是正确的吗?我也在使用 SDK 版本 7。

非常感谢我得到的帮助,谢谢大家!

编辑:通过删除 setContentView(R.layout.main); 在通过应用程序绘制启动应用程序时,文本会滚动,但小部件不会.有点让我觉得小部件不能有选框???有没有人在一个小部件上做一个选取框??

Edit2:已解决。这样做是这样的

在文本视图的xml中你需要一个标签这基本上我认为与getSeleted(true);相同

所以代码应该如下:

    <TextView android:id="@+id/fact" android:layout_
            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>

【问题讨论】:

欢迎来到 Stack Overflow!如果有人解决了您的问题,请记住接受答案。 欢呼,但解决方案不起作用 这真的对你有用吗?因为我不能让它工作...... 它有效。但是 IF 小部件有两个文本视图,只有一个文本视图在滚动...如何滚动所有文本视图? requestFocus 部分必须改为 &lt;requestFocus /&gt; 【参考方案1】:

解决了。这样做是这样的

在文本视图的xml中你需要一个标签这基本上我认为与getSeleted(true);相同

所以代码应该如下:

<TextView android:id="@+id/fact" android:layout_
        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>

【讨论】:

这很好用!但是它打破了我的点击事件,我的文本视图与相对布局内的 ImageView 重叠。任何想法如何解决这个问题? 不太确定,可能要限制尺寸。【参考方案2】:

你给setContentView打了两次电话:

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

您的活动只能有一种布局。如果widget_layout 是包含文本视图的小部件的布局,那么您不需要第二个setContentView

【讨论】:

是的,我知道。根据我的理解(我可能会说错),当您单击应用程序绘制上的应用程序时,这将打开链接到 AndroidManifest 的 Activity。现在在这个活动中,我希望它使用 main.xml。我遇到的问题是我需要使用一个 Activity 类,在该类中调用 onCreate() 来查看 layout_widget.xml 内容。这就是为什么我首先调用 layout_widget 以便我可以设置 layout_widget 的属性,然后将其恢复为内容。我知道这听起来不对,但我不知道该怎么做...... 嗨,我解决了这个问题。发布。编辑上面的帖子,了解这是如何实现的。

以上是关于扩展 AppWidgetProvider 的 Widget 中是不是可以使用 TextView Marquee?的主要内容,如果未能解决你的问题,请参考以下文章

从AppWidgetProvider到Broadcastreceiver的意图

AppWidgetProvider:在小部件放置时未调用 onAppWidgetOptionsChanged

ContentProvider 和 AppWidgetProvider 有啥关系

AppWidgetProvider 中的 super.onUpdate() 推荐?

使用匕首 2 在 Kotlin 中的 AppWidgetProvider 中的字段注入

如何发送数据?从 [AppwidgetProvider] 到 [Service]