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.LayoutParams
developer.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(txtviewExample) 使文本在 UI 屏幕上可见 你不能只发表评论而不回答已经回答的问题吗?以上是关于android:TextView 的 LayoutParams 以编程方式使视图消失的主要内容,如果未能解决你的问题,请参考以下文章