我已向TextView
添加RelativeLayout
,我已添加了SurfaceView
。我可以让TextView
在SurfaceView
上显示文字。
rl = new RelativeLayout(this);
tv = new TextView(this);
tv.setText(Integer.toString(GameScreen.score));
tv.setTextSize(50);
tv.setPadding(390, 50, 0, 0);
tv.setTextColor(Color.BLACK);
rl.addView(renderView);
rl.addView(tv);
setContentView(rl);
然后在我的GameScreen类的更新方法中,我把:
game.getTextView().setText(Integer.toString(score));
它给了我错误:
android.view.ViewRootImpl $ CalledFromWrongThreadException:只有 创建视图层次结构的原始线程可以触及其视图。
我该怎么做才能解决这个问题?
答案 0 :(得分:2)
使用以下建议的方式更新UIFont *helMedium = [UIFont fontWithName:@"HelveticaNeue-Medium" size:12.0];
NSDictionary *mediumDict = [NSDictionary dictionaryWithObject: helMedium forKey:NSFontAttributeName];
NSMutableAttributedString *mAttrString = [[NSMutableAttributedString alloc] initWithString:@"Year :" attributes: mediumDict];
UIFont *helNormal = [UIFont fontWithName:@"HelveticaNeue" size:12.0];
NSDictionary *normalDict = [NSDictionary dictionaryWithObject: helNormal forKey:NSFontAttributeName];
NSMutableAttributedString *nAttrString = [[NSMutableAttributedString alloc] initWithString:@"2016" attributes: normalDict];
Widget
UiThread
希望这有帮助。
答案 1 :(得分:1)
在UI线程中运行您的代码。您无法从工作线程执行UI操作。
your_context.runOnUiThread(new Runnable() {
public void run(){
game.getTextView().setText(Integer.toString(score));
}
});
答案 2 :(得分:1)
使用此代码。确定它会帮助你!
private void runThread() {
new Thread() {
public void run() {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
game.getTextView().setText(Integer.toString(score));
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
让我知道它是否有效! :)