【问题标题】:Sony Smartwatch - update text in multiple TextViews simultaneouslySony Smartwatch - 同时更新多个 TextView 中的文本
【发布时间】:2013-10-17 20:06:38
【问题描述】:

我想同时更新 Watch 上两个 TextView 中的文本。

ma​​in_layout.xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:id="@+id/text1"
        android:layout_width="220px"
        android:layout_height="50px"
        />
    <TextView
        android:id="@+id/text2"
        android:layout_width="220px"
        android:layout_height="50px"
        />
</LinearLayout>

现在我是这样做的:

sendText(R.id.text1, "Hello world 1");
sendText(R.id.text2, "Hello world 2");

问题是,我可以在 Watch 上看到,第一个文本设置得较早,然后是第二个。我想避免这种情况。

通常,Sony-SDK 支持捆绑包中的数据更新,例如在显示布局时:

Bundle b1 = new Bundle();
b1.putInt(Control.Intents.EXTRA_LAYOUT_REFERENCE, R.id.text1);
b1.putString(Control.Intents.EXTRA_TEXT, "Hello world 1");

Bundle b2 = new Bundle();
b2.putInt(Control.Intents.EXTRA_LAYOUT_REFERENCE, R.id.text2);
b2.putString(Control.Intents.EXTRA_DATA_URI, "Hello world 2");

Bundle[] layoutData = new Bundle[] { b1, b2 };

showLayout(R.layout.main_layout, layoutData);

但在这种情况下,布局被重新设置,这对我来说不是很好,因为屏幕上的其他一些视图可能已经改变了。

我希望,有可能通过以下方式实现:

Bundle bundle = new Bundle();
bundle.putInt(Control.Intents.EXTRA_LAYOUT_REFERENCE, R.id.text2);
bundle.putString(Control.Intents.EXTRA_TEXT, "Hello world 2");

Intent intent = new Intent(Control.Intents.CONTROL_SEND_TEXT_INTENT);

intent.putExtra(Control.Intents.EXTRA_LAYOUT_REFERENCE, R.id.text1);
intent.putExtra(Control.Intents.EXTRA_TEXT, "Hello world 1");

intent.putExtra(Control.Intents.EXTRA_LAYOUT_DATA, new Bundle[] { bundle });

sendToHostApp(intent);

但不幸的是,Watch 似乎忽略了 CONTROL_SEND_TEXT_INTENT 意图的 EXTRA_LAYOUT_DATA。

所以我的问题是:是否有可能在不重新设置布局的情况下将文本更新作为捆绑发送?

【问题讨论】:

    标签: android sony sony-smartwatch


    【解决方案1】:

    你做得对。更新整个屏幕是最好的方法,只需更新所有其他可能同时更改的字段。

    【讨论】:

    • 谢谢!但是更新整个屏幕是我试图通过仅设置 TextView 的文本值来避免的事情。
    • @OlegSkrypnyuk 好的,您实际上可以做到这一点,您只需要在您想要更新的屏幕的那些部分上“绘制”即可。通过“绘图”,我的意思是:Canvas textCanvas = new Canvas(bitmap); TextView textView = new TextView(mContext); textView.setTextSize(12); textView.setGravity(Gravity.CENTER | Gravity.BOTTOM); textView.layout(0, 0, width, height / 4); textView.setText("updated text"); textView.draw(textCanvas); showBitmap(toast, 0, height / 3);我已经在我的应用程序中这样做了(代码是从那里复制的)并且它工作得很好。
    • 酷!谢谢!不知何故,我忽略了带有 x/y 偏移的方法“showBitmap”。很高兴知道,有可能只更新屏幕的一部分。但是,如果我有两个 TextView,一个位于屏幕顶部,另一个位于底部,它们必须同时更改它们的文本,这将无济于事。所以我假设,我的问题的答案是“现在不可能”,但我希望索尼的人会在以后的版本中添加这个有用的功能。
    • ?您为什么不在发送的同一个位图中绘制两个文本视图,只需将它们准确放置在您需要的位置。在上面的代码中,只需添加另一个 textView 并将它们放在您想要的任何位置,当然,使背景位图与屏幕一样大,并确保背景是透明的。因此,所有事情都将在一次调用 showBitmap 时发生。最后别忘了接受我的回答:-)
    • 如果你愿意 - 我会接受你的回答,虽然这也不是我真正想要的。无论如何,感谢您愿意帮助我! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多