【发布时间】:2025-12-01 11:40:02
【问题描述】:
我想在手表上实现一个运行文本,这样一行文本就会从右向左移动。
对我来说最好的方法是创建一个具有屏幕宽度的 TextView,将文本设置为最大 paddingLeft,然后减少填充,以便文本(几个字)从从右到左。
所以我的问题是:是否可以动态更改 TextView 的属性“paddingLeft”?
<TextView
android:id="@+id/scrollingText"
android:layout_width="@dimen/smart_watch_2_control_width"
android:layout_height="wrap_content"
android:paddingRight="@dimen/smart_watch_2_control_width"
android:text="Hello world!"
/>
可能是这样的:
Intent intent = new Intent(Control.Intents.CONTROL_SEND_LAYOUT_INTENT);
intent.putExtra(Control.Intents.EXTRA_LAYOUT_REFERENCE, layoutReference);
intent.putExtra(Control.Intents.EXTRA_PADDING_LEFT, paddingLeft);
controlExtension.sendToHostApp(intent);
我很清楚,Control.Intents 中既没有 CONTROL_SEND_LAYOUT_INTENT 也没有 EXTRA_PADDING_LEFT,而且事实上,可以使用 CONTROL_PROCESS_LAYOUT_INTENT 完成类似的操作,但文档中有一条注释:
所以在我的情况下,我需要创建 220 个相等的 xml 文件,唯一的区别是 paddingLeft 设置为 220、219、218 等,并且每次都设置正确的布局? 这听起来不适合我:-)
另一种解决方法是使用 ImageView 而不是 TextView 并且每次在 Host 上将文本转换为 Bitmap 并通过“setImage”将更新发送到 Watch,实际上我已经实现了这种方式,但它是并不是真正的高性能解决方案...
我也想过发送前面有空格的文本,比如:
- “___Hello_world!”
- “__Hello_world!”
- “_Hello_world!”
但我希望移动的粒度更大。
那么有人对如何更改“paddingLeft”有任何想法吗?
【问题讨论】:
-
如果需要传递 XML 来构建布局,您始终可以在代码中动态“更改”XML。当然,如果尝试做一个标记或幻灯片,这可能不是一个好方法..
-
据我所知,您只能通过 Control.Intents.EXTRA_DATA_XML_LAYOUT 发送 R.layout.layoutID。请告诉我,如何更改xml?
-
我可以这样做:
LayoutInflater inflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(layoutID, null); ControlViewGroup mLayout = (ControlViewGroup) parseLayout(layout); ControlView scrollingText = mLayout.findViewById(R.id.scrollingText);但com.sonyericsson.extras.liveware.extension.util.control.ControlView中没有“更改”功能 -
抱歉,我以为您可以使用我在 controlextension 的 onstart/onresume 中发布的代码,但我一定错过了理解 sdk。
-
Oleg,你写:“请注意,扩展程序必须始终根据显示屏幕大小发送覆盖全屏的布局。这意味着即使扩展程序想要更新屏幕的一部分无论如何都必须提供全屏布局。”这不是 100% 正确的,我会详细介绍您在此处提出的另一个问题:*.com/questions/19402631/…
标签: android sony sony-smartwatch