Pergunta sobre android-edittext, coordinates, android, textview – Android - crie TextView (ou EditText) programaticamente e configure-o em um local específico na tela, dando coordenadas

4

Eu estou construindo um aplicativo android onde o usuário pinta alguns objetos na tela. Um tipo de objeto é um objeto de texto. O usuário cria o objeto arrastando o dedo e o objeto é mostrado como um retângulo que pode ser movido / remodelado. Quando o usuário toca no objeto de texto, inicio uma nova atividade na qual o usuário insere o texto que eu retorno no método onActivityResult.

Agora quero mostrar o texto no objeto. Eu posso ter acesso a coisas como as coordenadas do retângulo, etc da minha classe de texto. O que eu quero fazer, em essência, é criar um TextView (ou EditText) programaticamente e definir seus limites como os limites do meu retângulo que meu objeto é pintado dentro Existe um método que pode me ajudar a fazê-lo?

(Outra abordagem seria usar o método canvas.drawTextOnPath no meu objeto de texto. Mas isso parece mais complicado, pois meu texto pode sair do objeto e eu também teria que lidar com as multilinhas)

Muito obrigado antecipadamente!

EDIT: tentando abordagem da 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;
      }
  }  

ambas as impressões mostram o texto como esperado, mas não vejo nada na tela (tentei defini-lo no canto inferior esquerdo para começar)

Sim,o elemento raiz das exibições xml... Isso deve funcionar ... GAMA
Depende de você Layout. Pode serRelativeLayout.LayoutParams ouLinearLayout.LayoutParams... GAMA
queres dizer o elemento raiz das vistas xml? Isso é o que eu pensava, mas tentei ambos sem sorte .. george
ok, obrigado mesmo assim pelo seu tempo george

Sua resposta

3   a resposta
3

Na realidade,drawTextOnPath é sua melhor aposta. Não vai sangrar. Tudo o que você precisa fazer é criar um caminho que vai da esquerda, centro vertical do seu retângulo para o centro da direita vertical. O método cuidará de redimensionar o texto para que ele permaneça dentro do caminho.

Você pode ajustar o caminho de acordo usandoPaint.getTextWidth(). Se a largura for maior que a caixa, estenda seu caminho com uma linhaPaint.getTextHeight() abaixo da primeira linha.

Calcular a largura do texto é fácil. Existe um método em tinta para isso. Eu adicionei o código. Zaid Daghestani
obrigado, mas acho que, se o texto for maior que o retângulo, algumas letras simplesmente não serão exibidas. Eu quero ir para uma segunda linha. O que eu acho que pode ser feito, mas é complexo calcular a largura do texto, também do objeto e definir os caminhos de acordo. Ou eu estou errado? george
sim, isso é o que eu pensei em fazer. A complexidade está em que eu quero que o texto seja colocado no centro da caixa, então se eu tiver uma segunda linha, eu tenho que mover o primeiro caminho um pouco para cima e adicionar o segundo logo abaixo. Se eu tiver 3 ou 4 linhas, continua. Eu sei que pode ser feito, eu só queria um TextView para lidar com isso para mim :) george
1

Tente isto:

TextView tv=new TextView(this);
LayoutParams lp = new LayoutParams(new ViewGroup.MarginLayoutParams(width,height));
tv.setLayoutParams(lp);
lp.setMargins(0, 0, 0, 0);
por favor verifique minha edição onde eu adicionei o código. Eu faço algo errado? No fundo há uma imagem, por isso deve estar visível (outras letras vermelhas são) george
sim, defino também tv.setTextSize (15); tv.setTextColor (Color.RED); george
Eu tento isso, mas o texto não é exibido. Como largura e altura eu dou a largura e altura do meu retângulo e no lp.setMargins eu dou (int esquerda, int top, int direita, int bottom) do meu retângulo. E então tv.setText (text); estou esquecendo de algo? george
oops, desculpe, foi um erro de digitação. eu quis dizerlp.setMargins(0,0,0,0); GAMA
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 );
Suponha que você queira criar EditText quando clicar no botão. então você tem que escrever acima dentro daquele botão click listner e então clicar no botão edittext criado para você e mais um acha quando edittext é criar para ter que adicionar este edittext dentro de qualquer layout no seu arquivo layout.xml Sachin Gurnani
Desculpe, eu não entendi. Onde nisto eu defino os limites do EditText? george

Perguntas relacionadas