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

Posted

技术标签:

【中文标题】android:TextView 的 LayoutParams 以编程方式使视图消失【英文标题】:android: LayoutParams for TextView makes the view disappear, programmatically 【发布时间】:2012-08-11 09:41:19 【问题描述】:

我从各种不同的角度来解决这个问题。基本上要点是这样的:

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

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

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

<TextView
  android:id="@+id/txtviewWhiteBox"
  android:layout_
  android:layout_
  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 消失了。

这是相关的sn-p:

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 消失。 我已经搜索了这里的论坛,但还没有找到答案。这不会那么罕见。

【问题讨论】:

你试过TableRow.LayoutParamsdeveloper.android.com/reference/android/widget/… 我刚刚做了,(昨晚错过了这条评论,darnit),它成功了。谢谢大佬 【参考方案1】:

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

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

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

【讨论】:

layoutparams 中的第三个引用是权重,相当于 XML 中的 android:layout_weight="1.0" 部分。而.setVisible(View.VISABLE); 不起作用。不过,谢谢。 FWIW,我也尝试过不使用txtviewExample.setLayoutParms(paramsExample);,然后在布局中的实际 addView 期间,将其指定为辅助参数。还是不行:tblrow.addView(txtviewExample,paramsExample); in setText 我假设你有一个实际的字符串变量?这个变量被调用时是否有任何数据? 是的。一切都按计划进行。填充、背景、文本大小/颜色/措辞......我似乎需要 layoutParams 的唯一事情是设置 XML 中存在的 android:layout_margin="20dp" 部分。当我从代码中删除 LayoutParams 时,TextView 会呈现,但由于缺少边距设置,它不在正确的位置。 尝试从布局参数中删除权重,并尝试将文本视图放入另一个布局***.com/a/4814716/727429【参考方案2】:

嗯,这很痛苦,但我终于明白了。 要记住的最重要的事情(我刚刚意识到)是在无数的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);

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

【讨论】:

谢谢!我遇到了同样的问题,这是因为我使用的是 LinearLayout.LayoutParams 而不是 TableRow.LayoutParams ......愚蠢的错误,但你让我免于沮丧! 感谢您的清晰解释!你停止了我几个小时的痛苦! 谁能告诉我使用了哪些进口产品?【参考方案3】:
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//

//使用

【讨论】:

使用 setContentView(txtv​​iewExample) 使文本在 UI 屏幕上可见 你不能只发表评论而不回答已经回答的问题吗?

以上是关于android:TextView 的 LayoutParams 以编程方式使视图消失的主要内容,如果未能解决你的问题,请参考以下文章

android textview 多行文字居中 不是gravity 也不是layout——gravity

如何在android中点击textview

TextView-下拉

Android 动态创建 Textview

Android 动态创建 Textview

在Android开发中。怎么能让layout中的TextView控件不会根据其它控件的大小而改变位置。