29

我已经从各种不同的角度打了这个。基本上要点是这样的:

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

这里的问题是 XML TextView 有很多布局调整(有效)并且是必要的。但如果我真的在代码中设置它们,TextView 甚至不会出现。

(顺便说一下,TextView 嵌套在 TableRow 中,因此调用了 weight。)我首先设计的 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 消失。我已经搜索了这里的论坛,但还没有找到答案。这不会那么罕见。

4

3 回答 3

115

好吧,那很痛苦,但我终于明白了。要记住的最重要的事情(我刚刚意识到)是在无数的 中LayoutParams,您需要使用与您正在处理的视图的父视图相关的一个,而不是实际视图。

所以在我的情况下,我试图让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);
}

谢谢大家,希望这对其他人有用,因为我在这里的论坛中看到了很多半相关的问题,但不是真正定义问题的问题。

于 2012-08-15T14:48:17.867 回答
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//
}

//利用

于 2013-07-24T04:58:01.860 回答
0

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

最后如果你追你会发生txtviewExample.setVisible(View.Visible)什么setLayoutParams

如果你没有,我会尝试这些

于 2012-08-15T02:49:52.330 回答