Вопрос по android – Android - создайте TextView (или EditText) программно и установите его в определенном месте на экране, задавая координаты

4

Я создаю приложение для Android, где пользователь рисует некоторые объекты на экране. Один тип объекта - это текстовый объект. Пользователь создает объект, перетаскивая его палец, и объект отображается в виде прямоугольника, который можно перемещать / изменять. Когда пользователь нажимает на текстовый объект, я запускаю новую операцию, где пользователь вводит текст, который я возвращаю по методу onActivityResult.

Теперь я хочу показать текст в объекте. Я могу получить доступ к вещам, таким как координаты прямоугольника и т. Д. Из моего текстового класса. По сути, я хочу создать 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;
      }
  }  

оба отпечатка показывают текст, как и ожидалось, но я ничего не вижу на экране (для начала попытался установить его в левом нижнем углу)

хорошо, спасибо в любом случае за ваше время george
Извини друг. Я понятия не имею, что может быть причиной. Я могу предложить вам 2 попробоватьcanvas.drawTextOnPath как предложено вами ранее GAMA
да оба .. Строка, которую я дал ребенку george
Привет еще раз, один вопрос, можете ли вы сказать мне, какой импорт вы используете, чтобы распознать LayoutParams? (Я сомневаюсь, что проблема есть, но ..) george
ты получаешь правильные результаты вSystem.out.println(text); а такжеSystem.out.println("got "+tv.getText()); ??? GAMA

Ваш Ответ

3   ответа
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 );
Error: User Rate Limit Exceeded george
Error: User Rate Limit Exceeded
3

На самом деле,drawTextOnPath это ваша лучшая ставка. Это не истечет кровью. Все, что вам нужно сделать, это создать путь, который идет от левой, центральной вертикали вашего прямоугольника к правой центральной вертикали. Метод позаботится об изменении размера текста, чтобы он оставался в пределах пути.

Вы можете настроить путь соответствующим образом, используяPaint.getTextWidth(), Если ширина больше, чем поле, растяните путь с помощью линииPaint.getTextHeight() ниже первой строки.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded george
Error: User Rate Limit Exceeded george
1

Попробуй это:

TextView tv=new TextView(this);
LayoutParams lp = new LayoutParams(new ViewGroup.MarginLayoutParams(width,height));
tv.setLayoutParams(lp);
lp.setMargins(0, 0, 0, 0);
Error: User Rate Limit Exceeded george
Error: User Rate Limit Exceeded george
Error: User Rate Limit Exceeded george
Error: User Rate Limit Exceededlp.setMargins(0,0,0,0);
Error: User Rate Limit Exceeded

Похожие вопросы