RelativeLayout.LayoutParams中的addRule不起作用

问题描述 投票:0回答:3

我有这个代码:

final RelativeLayout headerRl=new RelativeLayout(SpeakersActivity.this);
            headerRl.setBackgroundColor(Color.parseColor(almacen.getColor()));
            final TextView initial=new TextView(SpeakersActivity.this);
            final RelativeLayout.LayoutParams headerParams=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 80);
            headerParams.addRule(RelativeLayout.CENTER_VERTICAL,RelativeLayout.TRUE);
            initial.setText(arrayInitials.get(i));
            initial.setTextColor(getColor(R.color.white));
            initial.setTextSize(16);
            initial.setPadding(10,0,0,0);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    headerRl.addView(initial,headerParams);
                    ll.addView(headerRl);
                }
            });

“ll”是LinearLayout。我在RelativeLayout.LayoutParams上添加规则,我将视图添加到RelativeLayout,并添加到LinearLayout。但我的观点不是垂直居中的。我试图将它水平居中以确定它是否正常工作,但事实并非如此。为什么我的观点不在RL的中心?如何居中?

谢谢。

android android-relativelayout layoutparams
3个回答
1
投票

取决于您期望的结果有两种方法可以解决您的问题。

第一个:问题出在headerRl中,默认设置为wrap_content,wrap_content所以,你需要的是用match_parent定义它的布局参数:

headerRlLayoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) 
headerRl.setLayoutParams(headerRlLayoutParams)

第一个参数可能是wrap_content,取决于你想要的,但第二个应该是match_parent,否则,默认情况下它将是wrap_content,它将你的视图置于顶部

创建headerParams为headerParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT...就是这样。在此处匹配父级会使您的视图占据整个父级的宽度。如果这是您想要的,请参阅下面的第二个选项

第二个:如果你想把你的视图作为match_parent并采取整个视图,那么你的问题是:new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,这导致你的文本视图在布局中是match_parent。并且因为你没有设置view的重力 - 文本有默认值 - top / start。

解决方案很简单 - 设置TextView Gravity(与在XML中设置重力参数相同) - 视图将保持为match_parent - 获取其父级布局的整个宽度,但文本将垂直居中

initial.setGravity(Gravity.CENTER_VERTICAL);

还有一个小提示 - 您还可以在开发人员选项中设置“显示布局边界”,以查看布局所占用的空间以及视图如何在布局中自定位。这有助于调试和理解究竟出了什么问题


0
投票
initial.setGravity(Gravity.CENTER_VERTICAL);

0
投票

试试吧

 final RelativeLayout.LayoutParams headerParams=new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 80);

/**
 * Rule that centers the child vertically with respect to the
 * bounds of its RelativeLayout parent.
 */           
 headerParams.addRule(RelativeLayout.CENTER_VERTICAL,RelativeLayout.TRUE);

 // your textview
 initial.setGravity(Gravity.CENTER_VERTICAL);
© www.soinside.com 2019 - 2024. All rights reserved.