android:TextView的LayoutParams使视图以编程方式消失

我从不同的角度来看这个。 基本上要点是:

我已经在XML中为一个以编程方式运行NEEDS的接口布局了一个模板,因此它将在运行期间动态填充。

这里的问题是XML TextView有很多布局调整(有效)并且是必要的。 但是如果我实际上在代码中设置它们,TextView甚至都不显示。

(顺便说一下,TextView嵌套在TableRow中,因此调用了权重。)我首先设计的XML模板,用作代码的参考是这样的,它工作得很好:

 

就像我说的那样,完美地展现出来。 当我在代码中运行相同的布局,并应用LayoutParams时,TextView消失。

这是相关的片段:

 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); } 

我意识到LayoutParams有各种各样的可用类,我一直在玩它们所有的LinearLayout.LayoutParams,TableView.LayoutParams,RelativeLayout.LayoutParams,LayoutParams本身…无论我尝试哪一个,任何调用的尝试“setLayoutParams”渲染整个TextView。 我在这里搜索了论坛,但还没find答案。 这不是那么罕见。

Solutions Collecting From Web of "android:TextView的LayoutParams使视图以编程方式消失"

好吧,这很痛苦,但我终于搞清楚了。 要记住的最重要的事情(我刚刚意识到)是所有无数的LayoutParams ,你需要使用与你正在处理的视图的PARENT相关的那个,而不是实际的视图。

所以在我的情况下,我试图让TextView边距有效,但它被放在TableRow 。 一个简单的改变是确保使用的LayoutParamstypes是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); } 

谢谢大家,希望这对于其他人来说会派上用场,因为我在论坛中看到了很多半相关的问题,但没有真正定义问题的问题。

 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// } 

//使用

layoutparams应该做的第三个variables是alpha? 如果你注释掉paramsExample.setMargins会发生什么

最后,如果你在setLayoutParams之后使用txtviewExample.setVisible(View.Visible)会发生什么?

如果你没有,我会尝试的那些东西