扩展 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
部分必须改为 <requestFocus />
【参考方案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() 推荐?