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

时间:2012-06-05 09:24:34

标签: android textview android-edittext coordinates

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

现在我想在对象中显示文本。我可以从我的文本类中访问作为Rectangle等坐标的东西。我本质上想做的是以编程方式创建TextView(或EditText)并将其边界设置为我的对象所绘制的矩形的边界。是否有方法可以帮助我做到这一点?

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

非常感谢你!

编辑:尝试GAMA的方法

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;
      }
  }  

两个印刷品都按预期显示文字,但我在屏幕上看不到任何内容(试图将其设置在左下角开头)

3 个答案:

答案 0 :(得分:10)

                    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 );

答案 1 :(得分:3)

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

您可以使用Paint.getTextWidth()相应地调整路径。如果宽度大于框,请使用第一行下方的行Paint.getTextHeight()扩展您的路径。

答案 2 :(得分:1)

试试这个:

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