RelativeLayout.LayoutParams中的addRule无法正常工作

时间:2019-04-02 15:54:33

标签: android android-relativelayout layoutparams

我有此代码:

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中?如何居中?

谢谢。

3 个答案:

答案 0 :(得分: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并采用整个视图,则 您的问题是:     新的RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT 这会使您的文本视图在布局中成为match_parent。而且因为您没有设置视图的重力-文本默认设置为-顶部/开始。

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

initial.setGravity(Gravity.CENTER_VERTICAL);

还有一个小提示-您还可以在开发人员选项中设置“显示布局范围”,以查看布局占用的空间以及视图在布局中的位置。这可能有助于调试和了解到底出了什么问题

答案 1 :(得分: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);

答案 2 :(得分:0)

launchSettings.json