我有这个代码:
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的中心?如何居中?
谢谢。
取决于您期望的结果有两种方法可以解决您的问题。
第一个:问题出在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);
还有一个小提示 - 您还可以在开发人员选项中设置“显示布局边界”,以查看布局所占用的空间以及视图如何在布局中自定位。这有助于调试和理解究竟出了什么问题
initial.setGravity(Gravity.CENTER_VERTICAL);
试试吧
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);