Android - TextView不显示

问题描述:

我有一个TextView,用于在屏幕上显示,并做了我想要的。不过,我精简了一些后来的代码,通过触摸它的父代FrameLayout重新定位它。现在,TextView(名为angleView)停止在屏幕上显示,但是当我打印出它的坐标时,它仍然以相同的方式工作。任何人都可以看到我做错了什么?Android - TextView不显示

这里是从我onCreate()方法的代码:

angleView = new TextView(getApplicationContext()); 
angleView.setTextColor(Color.RED); 
angleView.setText("0"); 
angleView.setLayoutParams(new FrameLayout.LayoutParams(SCREEN_WIDTH/20, SCREEN_HEIGHT/20)); 

和从代码的FrameLayoutonTouchListener

preview.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      float y = (centerPoint.getY() - event.getY() + STATUS_BAR_HEIGHT); 
      float x = (centerPoint.getX() - event.getX()); 
      double angle = Math.atan(y/x); 
      setAngleFieldData(event, angle, y, x); 
      setFingerFollower(event, angle); 
      setYMeasure(event, y); 
      setXMeasure(event, x); 
      setTextPositions(event, angle, y, x); 
      Log.i("angleX", String.valueOf(angleView.getX())); 
      Log.i("angleY", String.valueOf(angleView.getY())); 
      return true; 
     } 

     private void setAngleFieldData(MotionEvent event, double angle, float y, float x){ 
      angleView.setText(String.valueOf(angle)); 
      angleView.setX(event.getX()); 
      angleView.setY(event.getY()); 
      if(isRadians) { 
       if(x < 0 && y >= 0){ 
        angleView.setText(String.valueOf(2 * Math.PI + angle)); 
       } 
      } 

     } 

(另一方法是无关紧要的,它使用的是,所有的来自各种方法的代码在onTouch中。)

而且如果你想知道,是的,那里我s:

preview.addView(angleView); 

非常感谢!

编辑:所有的代码是在onCreate()方法,内Activity

+0

是这样的在一个Activity里面?如果(是)不使用ApplicationContext,请使用适当的上下文。然后,为了测试,强制TextView处于一个简单的位置,以排除所有数学)。随处添加LOGS以查看数字。 – 2013-05-02 01:46:10

+0

它会是'新的TextView(this)'? – Jeeter 2013-05-02 01:47:14

+0

如果你在一个活动,是的。如果你还在一个新的TextView(getActivity()) – 2013-05-02 01:49:04

OK,我找到了真正的原因,它没有工作(我觉得现在非常愚蠢)。如果你看,你会发现我将参数设置为SCREEN_WIDTH和SCREEN_HEIGHT。好吧,我在设置这两个常量之前初始化了angleView。

好一个,Jeeter:d

+0

仍然应该使用活动上下文来代替应用程序上下文。请检查我答案中的链接,作为您应该使用活动上下文的原因。 – Raghunandan 2013-05-02 03:42:00

ApplicationContext无法修改用户界面。变化:

angleView = new TextView(getApplicationContext()); 

通过:

angleView = new TextView(this); 

或者如果你是一个片段内:

angleView = new TextView(getActivity()); 
+0

即使我改变它仍然不起作用。不过,它曾经使用getApplicationContext()正常工作。 – Jeeter 2013-05-02 01:53:43

您应该使用活动情境,而不是应用程序上下文

angleView = new TextView(ActivityName.this); 

请通过commonsware中的链接检查答案下面

When to call activity context OR application context?