Android-以编程方式创建TextView(或EditText),并将其设置在屏幕上给定坐标的特定位置

Android-以编程方式创建TextView(或EditText),并将其设置在屏幕上给定坐标的特定位置,android,textview,android-edittext,coordinates,Android,Textview,Android Edittext,Coordinates,我正在构建一个android应用程序,用户可以在屏幕上绘制一些对象。一种类型的对象是文本对象。用户通过拖动手指创建对象,对象显示为可移动/重塑的矩形。当用户点击文本对象时,我启动一个新的活动,用户在其中输入文本,我通过onActivityResult方法返回文本 现在我想在对象中显示文本。我可以从我的文本类中访问矩形的坐标等内容。本质上,我想做的是以编程方式创建TextView(或EditText),并将其边界设置为绘制对象的矩形的边界。有什么方法可以帮我做吗 (另一种方法是在我的文本对象中使用

我正在构建一个android应用程序,用户可以在屏幕上绘制一些对象。一种类型的对象是文本对象。用户通过拖动手指创建对象,对象显示为可移动/重塑的矩形。当用户点击文本对象时,我启动一个新的活动,用户在其中输入文本,我通过onActivityResult方法返回文本

现在我想在对象中显示文本。我可以从我的文本类中访问矩形的坐标等内容。本质上,我想做的是以编程方式创建TextView(或EditText),并将其边界设置为绘制对象的矩形的边界。有什么方法可以帮我做吗

(另一种方法是在我的文本对象中使用canvas.drawTextOnPath方法。但这似乎更复杂,因为我的文本可能会从对象中消失,而且我还必须处理多行)

提前非常感谢

编辑:尝试伽马的方法

protected void onActivityResult(int requestCode, int resultCode, Intent data) {                 
  switch(requestCode) { 
  case 1:
      if (resultCode == Activity.RESULT_OK) { 
            String text=data.getStringExtra("text");
            System.out.println(text);
            TextView tv=new TextView(this);
            //LayoutParams lp = new LayoutParams(new ViewGroup.MarginLayoutParams((int)texts.get(index).width,(int)texts.get(index).height));
            LayoutParams lp = new LayoutParams(new ViewGroup.MarginLayoutParams(100,100));
            //tv.setLayoutParams(lp);
            //lp.setMargins((int)texts.get(index).Sx, (int)texts.get(index).Sy, (int)texts.get(index).Lx, (int)texts.get(index).Ly);

            tv.setLayoutParams(lp);
            tv.setTextSize(10);
            tv.setTextColor(Color.RED);
            tv.setText(text);
            lp.setMargins(0,0,0,0);
            //tv.setVisibility(View.VISIBLE);
            System.out.println("got "+tv.getText());
            }
      break;
      }
  }  
两次打印都按预期显示文本,但我在屏幕上看不到任何内容(尝试将其设置在左下角开始)

尝试以下操作:

TextView tv=new TextView(this);
LayoutParams lp = new LayoutParams(new ViewGroup.MarginLayoutParams(width,height));
tv.setLayoutParams(lp);
lp.setMargins(0, 0, 0, 0);

实际上,
drawTextOnPath
是您的最佳选择。它不会流血。您所要做的就是创建一条从矩形的左垂直中心到右垂直中心的路径。该方法将负责调整文本大小,使其保持在路径内


您可以使用
Paint.getTextWidth()
相应地调整路径。如果宽度大于长方体,请在第一行下方添加一行
Paint.getTextHeight()

我尝试了此操作,但未显示文本。作为宽度和高度,我给出了矩形的宽度和高度,在lp.setMargins中,我给出了矩形的(int left、int top、int right、int bottom)。然后是tv.setText(text);我错过了什么吗?是的,我还设置了电视;tv.setTextColor(颜色:红色);我还记录了这个值,它是OK的。为了确保我理解并且我的矩形没有问题,我设置了lp.setMargins(0,0100);这不应该把电视设置成屏幕左上角的正方形吗?哦,对不起,这是一个打字错误。我的意思是
lp.setMargins(0,0,0,0)谢谢,但我认为如果文本大于矩形所能容纳的大小,一些字母将无法显示。我想把它转到第二行。我认为这是可以做到的,但是计算文本的宽度,以及对象的宽度并相应地设置路径是很复杂的。还是我错了?计算文本宽度很容易。在绘画中有一种方法。我添加了代码。是的,这就是我想做的。其复杂性在于我希望文本对齐在框的中心,因此如果我有第二行,我必须将第一条路径向上移动一点,并在右下方添加第二条路径。如果我有第三或第四行,它会继续。我知道这是可以做到的,我只是想要一个文本视图来为我处理:)对不起,我不明白。在这里我在哪里定义EditText的边界?假设您想在单击按钮时创建EditText。然后,您必须在该按钮内写入上述内容单击listner,然后单击为您创建的按钮edittext,并在创建edittext时再考虑一下,必须将此edittext添加到布局中的任何布局中。xml文件管理器u在
System.out.println(text)处获得正确的结果
System.out.println(“got”+tv.getText())???是,两者都有。。我给孩子的绳子对不起,伙计。我不知道原因是什么。我可以建议你尝试一下画布。drawTextOnPath
,就像你自己建议的那样。好的,谢谢你的时间。嗨,还有一个问题,你能告诉我你使用哪种导入,以便可以识别布局参数吗?(我怀疑问题是否存在,但是……)
                    EditText edText = new EditText(this);
            edText .setId(i);
            edText .setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
                    1f));

                    edText .setWidth(100);
            edText .setImeOptions(EditorInfo.IME_ACTION_NEXT);
            edText .setInputType(InputType.TYPE_CLASS_NUMBER);
            edText .setKeyListener(DigitsKeyListener.getInstance());
            edText .setMaxLines(1);
                    edText .setOnFocusChangeListener(this);
            edText .setOnEditorActionListener(this);
            edText .addTextChangedListener(this);

                    //this linearlayout id is declared inside your xml file
                        LinearLayout linear=(LinearLayout)findViewById(R.id.linearLayout1);
                        linear.addView(edText );