Android: crea TextView (o EditText) de forma programática y lo configura en un lugar específico de la pantalla dando coordenadas
Estoy construyendo una aplicación para Android donde el usuario pinta algunos objetos en la pantalla. Un tipo de objeto es un objeto Text. El usuario crea el objeto arrastrando su dedo y el objeto se muestra como un rectángulo que se puede mover / reformar. Cuando el usuario teclea el objeto de texto, lanzo una nueva actividad donde el usuario escribe el texto que devuelvo en el método onActivityResult.
Ahora quiero mostrar el texto en el objeto. Puedo tener acceso a cosas como las coordenadas del rectángulo, etc de mi clase de texto. Lo que quiero hacer en esencia, es crear un TextView (o EditText) de forma programática y establecer sus límites como los límites de mi rectángulo que mi objeto está pintado pulg ¿Hay un método que me puede ayudar a hacerlo?
- Alineación de un TextView y ImageView dentro de un LinearLayout
- Verticalmente Centro TextView en RelativeLayout
- Copiar texto de TextView en Android
- Android setMovementMethod en un TextView dentro de un ListView
- SetTextcolor utilizando getCurrentTextColor ()
(Otro enfoque sería utilizar el método canvas.drawTextOnPath en mi objeto de texto.Pero esto parece más complicado ya que mi texto podría salir del objeto, y también tendría que manejar las multilíneas)
¡Muchas gracias por adelantado!
EDIT: tratando el enfoque de 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 impresiones muestran el texto como se esperaba, pero no veo nada en la pantalla (intenté configurarlo en la parte inferior izquierda para empezar)
- Android - Recursos $ NotFoundException
- "IllegalStateException: scrollview puede alojar sólo un hijo directo" en un LinearLayout añadiendo
- Visualización de la variable en pantalla usando Android por TextViews
- ¿Es mejor usar múltiples SpanObjects o múltiples TextViews en Android?
- ¿Cómo puedo hacer que un TextView se desplace automáticamente al agregar más líneas de texto?
- TextView en TableRow está parcialmente oculto
- Nuevo carácter de línea \ n no se muestra correctamente en textView Android
- Debe utilizar "sp" en lugar de "dp" para los tamaños de texto
En realidad, drawTextOnPath
es su mejor apuesta. No se desangrará. Todo lo que tienes que hacer es crear un camino que va desde la izquierda, vertical del centro de su rectángulo a la vertical derecha del centro. El método se encargará de cambiar el tamaño del texto para que se mantenga dentro de la ruta.
Puede ajustar la ruta en consecuencia utilizando Paint.getTextWidth()
. Si el ancho es mayor que el cuadro, amplíe su ruta con una línea Paint.getTextHeight()
debajo de la primera línea.
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 );
Prueba esto:
TextView tv=new TextView(this); LayoutParams lp = new LayoutParams(new ViewGroup.MarginLayoutParams(width,height)); tv.setLayoutParams(lp); lp.setMargins(0, 0, 0, 0);
- Java.lang.RuntimeException: No se puede iniciar la actividad ComponentInfo
- Java.lang.NullPointerException en doInBackground poner HashMap en ArrayList