Je l'ai touché sous différents angles. Fondamentalement, le Gist est ceci:
J'ai présenté un modèle en XML pour une interface qui doit être exécutée par programme afin qu'elle soit remplie de manière dynamique au cours de l'exécution.
Le problème ici est que XML TextView a quelques modifications de mise en page (qui fonctionnent) et sont nécessaires. Mais si je les mets en code, le TextView n’apparaîtra même pas.
(Le TextView, en passant, est imbriqué dans un TableRow, d'où l'appel du poids.) Le modèle XML que j'ai conçu en premier, à utiliser comme référence pour le code est le suivant, et il fonctionne parfaitement:
<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" />
Comme je l'ai dit, cela fonctionne parfaitement ... lorsque je lance la même disposition dans le code et que j'applique LayoutParams, le TextView disparaît.
Voici l'extrait pertinent:
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);
}
Je réalise qu'il y a toutes sortes de classes disponibles pour LayoutParams, et je les ai toutes jouées LinearLayout.LayoutParams, TableView.LayoutParams, RelativeLayout.LayoutParams, LayoutParams tout seul ... Peu importe lequel I essayez, toute tentative d'appeler "setLayoutParams" rend tout le TextView parti . J'ai parcouru les forums ici, et je n'ai pas encore trouvé la réponse. Cela ne peut pas être si rare.
eh bien, c’était douloureux, mais j’ai enfin compris ce qui se passait ... La chose la plus importante à retenir (que je viens de réaliser) est que parmi toutes les myriades de LayoutParams
, vous devez utiliser celle qui concerne le PARENT du voir sur lequel vous travaillez, pas la vue réelle.
Donc dans mon cas, j'essayais de faire fonctionner les marges TextView
, mais elles étaient placées dans un TableRow
. Le changement simple consistait à s'assurer que le type de LayoutParams
utilisé était celui 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);
}
Merci les gars, j'espère que cela sera utile pour quelqu'un d'autre sur la ligne, car j'ai vu beaucoup de questions semi-liées dans les forums ici, mais pas celle qui définit vraiment le problème.
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//
}
//utilisation
quelle est la 3ème variable supposée faire dans layoutparams, est-ce alpha? que se passe-t-il si vous commentez paramsExample.setMargins
enfin, que se passera-t-il si vous txtviewExample.setVisible(View.Visible)
après setLayoutParams
?
ce seraient les choses que j'essaierais si vous n'avez pas