【问题标题】:Android - TextView not showingAndroid - TextView 不显示
【发布时间】:2013-04-26 02:19:01
【问题描述】:

我有一个TextView,它曾经显示在屏幕上,并做了我想做的事。然而,我简化了一些后来的代码,通过触摸它的父 FrameLayout 来重新定位它。现在,TextView(名为angleView)不再显示在屏幕上,但是当我打印出它的坐标时,它仍然以相同的方式工作。谁能看到我做错了什么?

这是我的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中。)

如果你想知道,是的,有一个:

preview.addView(angleView);

非常感谢!

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

【问题讨论】:

  • 这是在 Activity 中吗?如果(是)不使用 ApplicationContext,请使用适当的上下文。然后,为了测试,强制 TextView 处于一个简单的位置以排除你所有的数学)。在各处添加 LOGS 以查看数字。
  • new TextView(this)吗?
  • 如果你在一个活动中,是的。如果你在一个 Fragment new TextView(getActivity())
  • 另外,我尝试将angleView 设置为硬编码位置,但仍然没有显示出来。
  • 等等,你是在 Activity 的 onCreate() 方法中做的吗?你在哪里做preview.addview?什么是预览?

标签: java android textview visibility android-framelayout


【解决方案1】:

ApplicationContext 无法修改 UI。变化:

angleView = new TextView(getApplicationContext());

作者:

angleView = new TextView(this);

或者如果你在一个片段中:

angleView = new TextView(getActivity());

【讨论】:

  • 即使我改变它仍然不起作用。不过,它曾经与 getApplicationContext() 一起工作得很好。
【解决方案2】:

好的,我找到了它不起作用的真正原因(我现在对此感到很愚蠢)。如果你看,你会看到我将参数设置为 SCREEN_WIDTH 和 SCREEN_HEIGHT。好吧,我在设置这两个常量之前初始化了angleView。

好的,吉特:D

【讨论】:

  • 您仍然应该使用活动上下文来代替应用程序上下文。请检查我的答案中的链接,了解为什么应该使用活动上下文。
【解决方案3】:

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

   angleView = new TextView(ActivityName.this);

请通过以下链接查看commonsware的答案

When to call activity context OR application context?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多