我目前正在玩Android的Textview的字幕功能。但有个问题- 我有一个包含几个TextView的布局。在其中一个,显示音乐文件的标题,我想应用选框功能。 另一方面,我不断更新当前的曲目时间(每秒)。
问题是,每当显示跟踪时间的TextView被更新(setText())时,其他TextView的选取框就会停止。我想这是因为setText()将焦点移动到TextView,我将文本应用到。
有解决方法吗?
我使用了来自此tutorial
的字幕TextView的自定义类是否有可能(也许是自定义类)其他TextView不能“窃取”焦点?
谢谢!
此致
答案 0 :(得分:4)
当TextView为setEnabled(true)或获得焦点时启用Marquee。使用setEnabled(true)确保其他TextView在焦点移动时不会停止其选取框。
答案 1 :(得分:3)
但是有一个问题 - 我有一个包含一些TextView的布局。我在这里找到了解决方案: http://androidbears.stellarpc.net/?p=185
您应该扩展TextView类并覆盖几个方法
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if(focused)
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
@Override
public void onWindowFocusChanged(boolean focused) {
if(focused)
super.onWindowFocusChanged(focused);
}
@Override
public boolean isFocused() {
return true;
}
答案 2 :(得分:3)
就我而言,setEnabled(true)
没有解决问题。既没有请求焦点,也没有任何类似的东西,因为它不是焦点问题。我相信只要TextView经过onLayout()
,marquee也会重新启动。
在我的情况下,TextView位于具有layout_height="wrap_content"
的LinearLayout中。显示轨道时间的TextView位于带有选框的TextView下方。现在每当我更新下面的TextView时,我相信操作系统从头开始计算它的高度,并根据TextView的高度计算整个LinearLayout的高度(当然,每次都是相同的)。这就是为什么整个LinearLayout(以及它的孩子们)正在重新启动选框的onLayout()
。
长话短说,我将容器LinearLayout的高度设置为固定值,并且选框开始工作。
答案 3 :(得分:1)
在新音乐TextView更新后,您可以简单地将 requestFocus(); 重新打印到要进行选取的TextView上。如果你无法做到这一点,请发布一些我们可以帮助的代码。
答案 4 :(得分:1)
请在此处查看我的回答:https://stackoverflow.com/a/13841982/1823503
这个想法是:
答案 5 :(得分:0)
您可以使用LinearLayout
简单地包裹选框TextView