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

时间:2012-08-15 02:45:01

标签: android textview layoutparams

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

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

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

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

<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" />
像我说的那样,它完美地展现出来。 当我在代码中运行相同的布局,并应用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消失。 我在这里搜索了论坛,但还没有找到答案。这不是那么罕见。

3 个答案:

答案 0 :(得分:99)

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

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

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

答案 1 :(得分:1)

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

//使用

答案 2 :(得分:0)

layoutparams应该做的第三个变量是alpha?如果您注释掉paramsExample.setMargins

会发生什么

最后如果你txtviewExample.setVisible(View.Visible)之后setLayoutParams发生了什么?

如果你没有

,那将是我会尝试的事情