create - Android: LayoutParams para TextView hace que la vista desaparezca, programáticamente
layoutparams android (3)
He golpeado esto desde varios ángulos diferentes. Básicamente la esencia es esta:
He diseñado una plantilla en XML para una interfaz que NECESITA ejecutarse mediante programación, por lo que se rellenará dinámicamente durante la ejecución.
El problema aquí es que el XML TextView tiene algunos ajustes de diseño (que funcionan) y son necesarios. Pero si realmente los puse en código, el TextView ni siquiera aparece.
(La TextView, por cierto, está anidada dentro de TableRow, por lo tanto, la llamada al peso). La plantilla XML que diseñé primero, para usar como referencia para el código es la siguiente, y funciona bien:
<TextView
android:id="@+id/txtviewWhiteBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:background="@drawable/textview_9patch_white"
android:gravity="center"
android:text="75"
android:textColor="@android:color/black"
android:layout_margin="20dp"
android:padding="20dp"
android:textSize="40dp" />
Como he dicho, eso se desarrolla perfectamente. Sin embargo, cuando ejecuto el mismo diseño en el código y aplico LayoutParams, TextView desaparece.
Aquí está el fragmento relevante:
int textViewExampleID = 9001;
private TextView txtviewExample = new TextView(this);
private void buildTextView(){
LayoutParams paramsExample = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1.0f);
txtviewExample.setId(textViewExampleID);
txtviewExample.setBackgroundResource(R.drawable.textview_9patch_white);
txtviewExample.setGravity(Gravity.CENTER);
txtviewExample.setTextColor(getResources().getColor(android.R.color.black));
paramsExample.setMargins(20, 20, 20, 20);
txtviewExample.setPadding(20, 20, 20, 20);
txtviewExample.setTextSize(40);
txtviewExample.setText("customExample");
//if I comment out the following line, this TextView displays.
//if I leave it in, it doesn''t display.
txtviewExample.setLayoutParams(paramsExample);
}
Me doy cuenta de que hay todo tipo de clases disponibles para LayoutParams, y he estado jugando con todos ellos. "setLayoutParams" hace que todo el TextView se haya ido. He rastreado los foros aquí, y no he encontrado la respuesta. Esto no puede ser tan raro.
¿Cuál es la tercera variable en layoutparams que se supone que debe hacer, es esa alfa? ¿Qué pasa si paramsExample.setMargins
finalmente, ¿qué sucede si txtviewExample.setVisible(View.Visible)
después de establecerLayoutParams?
Esas serían las cosas que probaría si no las tuviera
Bueno, eso fue doloroso, pero finalmente lo entendí. Lo más importante que debo recordar (de lo que me he dado cuenta) es que de todas las miles de LayoutParams
de LayoutParams
, necesitas usar el que se relaciona con el PADRE de la vista en la que estás trabajando, no la vista real.
Así que en mi caso, estaba tratando de que los márgenes de TextView
funcionaran, pero se estaba TableRow
dentro de una TableRow
. El único cambio simple fue garantizar que el tipo de LayoutParams
se utilizaba eran los de TableRow
:
private void buildTextView(){
// the following change is what fixed it
TableRow.LayoutParams paramsExample = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1.0f);
txtviewExample.setId(textViewExampleID);
txtviewExample.setBackgroundResource(R.drawable.textview_9patch_white);
txtviewExample.setGravity(Gravity.CENTER);
txtviewExample.setTextColor(getResources().getColor(android.R.color.black));
paramsExample.setMargins(20, 20, 20, 20);
txtviewExample.setPadding(20, 20, 20, 20);
txtviewExample.setTextSize(40);
txtviewExample.setText("customExample");
txtviewExample.setLayoutParams(paramsExample);
}
Gracias, espero que esto sea útil para alguien más en la línea, ya que he visto muchas preguntas semi-relacionadas en los foros aquí, pero no una que realmente define el problema.
private TextView txtviewExample = new TextView(this);
private void buildTextView(){
LayoutParams paramsExample = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1.0f);
txtviewExample.setId(textViewExampleID);
txtviewExample.setBackgroundResource(R.drawable.textview_9patch_white);
txtviewExample.setGravity(Gravity.CENTER);
txtviewExample.setTextColor(getResources().getColor(android.R.color.black));
paramsExample.setMargins(20, 20, 20, 20);
txtviewExample.setPadding(20, 20, 20, 20);
txtviewExample.setTextSize(40);
txtviewExample.setText("customExample");
setContentView(txtviewExample);//when you don''t use SETTER method for TextView you can''t view the desireable text on the UI//
}
//utilizar