android: LayoutParams para TextView faz a exibição desaparecer, programaticamente
Eu bati isso de vários ângulos diferentes. Basicamente, a essência é esta:
Eu coloquei um modelo em XML para uma interface que precisa ser executado de forma programática, por isso vai ser preenchida dinamicamente durante a execução.
O problema aqui é que o XML TextView tem alguns ajustes de layout (que funcionam) e são necessários. Mas se eu realmente os definir no código, o TextView nem aparece.
(O TextView, por sinal, é aninhado dentro de um TableRow, portanto, a chamada para o peso.) O modelo XML que eu projetei primeiro, para usar como referência para o código, é isso, e funciona muito bem:
<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 eu disse, isso se encaixa perfeitamente. No entanto, quando executo o mesmo layout no código e aplico o LayoutParams, o TextView desaparece.
Aqui está o trecho 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);
}
Eu percebo que há todos os tipos de classes disponíveis para LayoutParams, e eu tenho jogado com eles todos LinearLayout.LayoutParams, TableView.LayoutParams, RelativeLayout.LayoutParams, LayoutParams por si só ... Não importa qual eu tente, qualquer tentativa de chamar "setLayoutParams" renderiza todo o TextView. Eu vasculhei os fóruns aqui e não encontrei a resposta. Isso não pode ser assim tão incomum.