以编程方式在 ImageView 上居中 TextView
Posted
技术标签:
【中文标题】以编程方式在 ImageView 上居中 TextView【英文标题】:Center TextView over ImageView programmatically 【发布时间】:2019-03-05 12:03:47 【问题描述】:我想在我的应用中添加图片和文字。 我需要将文本置于图像的中心。 一切都是使用RelativeLayout 对象以编程方式完成的。 出于某种原因,我只能成功地将 TextView 垂直居中于 ImageView 上。
这是创建RelativeLayout的函数:
private void buildPost(Context context)
Random rnd = new Random();
SquareImageView postBgImgIV = new SquareImageView(context);
postBgImgIV.setBackgroundColor(Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)));
postBgImgIV.setImageResource(R.drawable.clear);
TextView postContentTV = new TextView(context);
postContentTV.setText(this.postContent);
postContentTV.setTextSize(42);
//postContentTV.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
postContentTV.setGravity(Gravity.CENTER);
post = new RelativeLayout(context);
post.addView(postBgImgIV);
post.addView(postContentTV);
我确定我遗漏了一些东西,它无法用几行代码解决。 我很乐意得到帮助:)
【问题讨论】:
我认为您的视图缺少必需的宽度和高度,为此您需要一个 RelativeLayout.LayoutParams。使用此类时,您还必须相对于容器定位图像和文本视图(发布RelativeLayout)。如果您在 xml 中设置所有这些并将其更改为运行时而不是动态地创建所有内容,则会更容易一些。 这会有点困难,因为我在 xml 中没有 relativeLayout。我使用代码“随时随地”创建 relativeLayout,然后将 relativeLayout 推送到 scrollView。 你将不得不以编程方式进行。而RelativeLayout,在你添加到父视图之前,还需要设置它的Layouts,具体的类依赖于父视图。例如,如果它是 FrameLayout,则 RelativeLayout 需要将 FrameLayout.LayoutParams 设置为其 layoutParams。 谢谢,我试过了,现在我遇到了一个问题,我无法将 LinearLayout 参数(xml 中存在的布局)转换为 RelativeLayout 参数 【参考方案1】:问题解决了! 实际上,我需要定义新的 RelativeLayout.LayoutParams,然后将 textView LayoutParams 定义为新的 RelativeLayout.LayoutParams。
代码吧:
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
postContentTV.setLayoutParams(params);
【讨论】:
【参考方案2】:您需要在文本视图中添加布局参数
TextView textView = new TextView(context);
RelativeLayout.LayoutParams lp=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);;
【讨论】:
这不起作用,因为textView.getLayoutParams()
未定义并返回 null。错误信息:Attempt to invoke virtual method 'void android.widget.RelativeLayout$LayoutParams.addRule(int)' on a null object reference
以上是关于以编程方式在 ImageView 上居中 TextView的主要内容,如果未能解决你的问题,请参考以下文章