在相对布局内布局TextView的问题(在主布局相对布局中)
问题描述:
代码如下,但我在创建相对布局(这是一个linearLayout的子项)时遇到了一些问题。我认为我正确创建了两个文本浏览器(设置了两个ID)并正确设置了每个布局文件。在相对布局内布局TextView的问题(在主布局相对布局中)
但是,第一个textview没有居中,第二个textview没有被绘制到屏幕上(它应该在menuTitle下面)。请让我知道我在哪里错了。代码中的LinearLayout,RelativeLayout在一个主要的RelativeLayout中(在setContentView行中注明)。我所有的自定义类都只是重写draw方法在视图周围绘制白色边框。我不会在这些子类中完全改变布局参数(我注意到有些人在这样做时遇到了问题)。
作为一个方面说明 - 这些将被动态创建,这就是编程路由而不是XML的原因。无论如何,感谢所有提前的帮助!
CustomRelativeLayout subMenuLayout = new CustomRelativeLayout(this);
subMenuLayout.setBackgroundColor(Color.TRANSPARENT);
RelativeLayout.LayoutParams subMenuLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
subMenuLayoutParams.addRule(RelativeLayout.RIGHT_OF, sideMenu.getId());
subMenuLayoutParams.setMargins(0, 0, 200, 0);
subMenuLayout.setLayoutParams(subMenuLayoutParams);
TextView menuItemTitle = new CustomTextView(this);
menuItemTitle.setText("All You Can Eat");
menuItemTitle.setTextSize(30);
menuItemTitle.setBackgroundColor(Color.TRANSPARENT);
menuItemTitle.setTextColor(Color.WHITE);
menuItemTitle.setId(2);
RelativeLayout.LayoutParams menuItemTitleParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
menuItemTitleParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
menuItemTitleParams.setMargins(0, 0, 0, 15);
menuItemTitle.setLayoutParams(menuItemTitleParams);
TextView menuItemDesc = new CustomTextView(this);
menuItemDesc.setText("All you can ribs, chicken, pork and sides you can stomach to eat\nAlso includes dessert!");
menuItemDesc.setTextSize(15);
menuItemDesc.setBackgroundColor(Color.TRANSPARENT);
menuItemDesc.setTextColor(Color.WHITE);
menuItemDesc.setId(3);
RelativeLayout.LayoutParams menuItemDescParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
menuItemDescParams.addRule(RelativeLayout.BELOW, menuItemTitle.getId());
menuItemDesc.setLayoutParams(menuItemDescParams);
subMenuLayout.addView(menuItemTitle);
subMenuLayout.addView(menuItemDesc);
RelativeLayout screenLayout = new RelativeLayout(this);
screenLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
screenLayout.setBackgroundResource(R.drawable.body_bkgd);
screenLayout.addView(sideMenu);
screenLayout.addView(subMenuLayout);
setContentView(screenLayout);
}
答
我认为你需要在垂直方向的LinearLayout
包住你的TextView
秒。将两个TextView
s都添加到LinearLayout而不是RelativeLayout
,然后将LinearLayout
添加到RelativeLayout
并带有所需的位置参数。这里有一个例子:
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
TextView menuItemTitle = new CustomTextView(this);
menuItemTitle.setText("All You Can Eat");
menuItemTitle.setTextSize(30);
menuItemTitle.setBackgroundColor(Color.TRANSPARENT);
menuItemTitle.setTextColor(Color.WHITE);
LinearLayout.LayoutParams menuItemTitleParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
menuItemTitleParams.gravity = Gravity.CENTER_HORIZONTAL;
menuItemTitle.setLayoutParams(menuItemTitleParams);
TextView menuItemDesc = new CustomTextView(this);
menuItemDesc.setText("All you can ribs, chicken, pork and sides you can stomach to eat\nAlso includes dessert!");
menuItemDesc.setTextSize(15);
menuItemDesc.setBackgroundColor(Color.TRANSPARENT);
menuItemDesc.setTextColor(Color.WHITE);
menuItemDesc.setLayoutParams(menuItemTitleParams);
linearLayout.addView(menuItemTitle);
linearLayout.addView(menuItemDesc);
答
无法评论,所以这必须被放置在答案尽管没有实际回答你的问题。
你不必去通过所有的代码,只是因为被动态地创建你的意见 - 你可以得到一个吹气的保持和直接膨胀一个layout.xml文件:
LayoutInflater inflater = LayoutInflater.fromContext(getContext())
View layout = inflater.inflate(R.layout.some_layout, parentView, false);
// Any other set up here.
parentView.addView(layout);
这可能有助于与您的问题,因为它可能有助于确定错误的嵌套视图或类似。
似乎工作,除了两个textViews不居中。它们仍然被RelativeLayout左对齐。它似乎应该居中正确... – cspam 2012-03-06 18:11:07
你是否要做类似screenLayout.addView(linearLayout,Gravity.CENTER_HORIZONTAL)? – cspam 2012-03-06 18:14:33
没有最后的评论 - 我想你的意思是“然后添加LinearLayout与RelativeLayout与你想要的位置参数”意味着设置一个位置像素?再次感谢 – cspam 2012-03-06 18:32:27