Android TextView SetText()停止另一个TextView的选框 - 解决方法?

时间:2011-02-11 22:00:15

标签: android textview marquee

我目前正在玩Android的Textview的字幕功能。但有个问题- 我有一个包含几个TextView的布局。在其中一个,显示音乐文件的标题,我想应用选框功能。 另一方面,我不断更新当前的曲目时间(每秒)。

问题是,每当显示跟踪时间的TextView被更新(setText())时,其他TextView的选取框就会停止。我想这是因为setText()将焦点移动到TextView,我将文本应用到。

有解决方法吗?

我使用了来自此tutorial

的字幕TextView的自定义类

是否有可能(也许是自定义类)其他TextView不能“窃取”焦点?

谢谢!

此致

6 个答案:

答案 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上。如果你无法做到这一点,请发布一些我们可以帮助的代码。

  

TextView.requestFocus()

答案 4 :(得分:1)

请在此处查看我的回答:https://stackoverflow.com/a/13841982/1823503

这个想法是:

  • 以编程方式修复宽度和高度
  • to setSelected
  • 覆盖TextView以解决焦点问题

答案 5 :(得分:0)

您可以使用LinearLayout

简单地包裹选框TextView