2012-07-25 102 views
7

我需要以编程方式创建一个按钮,并使其在居中布局上,水平和垂直。我试着用下面的代码:Android:如何以编程方式创建中心按钮?

LinearLayout ll = (LinearLayout)findViewById(R.id.layoutItem); 
Button b = new Button(this);   
b.setBackgroundDrawable(getResources().getDrawable(R.drawable.button)); 
b.setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT)); 
b.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL); 
ll.addView(b); 

但它不工作。按钮在左上方出现。

有关如何解决此问题的任何线索?

非常感谢。

+0

尝试设置LinearLayout的'LayoutParams'而不是'Button'本身的'LayoutParams' – DroidBender 2012-07-25 19:41:14

+0

LinearLayout的params通过XML设置。如果我没有设置按钮的参数,它将被填充以填充父项。 – 2012-07-25 19:43:11

+0

为什么不把它放在XML文件中? – JuiCe 2012-07-25 19:51:24

回答

18

我会做这样的事情:

LinearLayout.LayoutParams ll = (LinearLayout.LayoutParams)b.getLayoutParams();  
ll.gravity = Gravity.CENTER; 
b.setLayoutParams(ll); 

看看是否能工程。

+0

作品。非常感谢。 – 2012-07-25 20:01:58

+0

没问题...很高兴我能帮到你。 :) – 0gravity 2012-07-25 20:02:40

10

或者你可以使用一个RelativeLayout为你的父母View并执行以下操作:

this.testButton= (Button) this.findViewById(R.id.testButton); 

    RelativeLayout.LayoutParams testLP = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

    testLP.addRule(RelativeLayout.CENTER_IN_PARENT); 

    this.testButton.setLayoutParams(testLP); 

可以为RelativeLayout设定一些规则。

+0

谢谢。作为替代解决方案,我会牢记这一点。上面的那个虽然很有魅力。 – 2012-07-25 20:02:41

+0

是的,我当时正在发布答案。只是以为我会发布这一个...因为'RelativeLayout'给你更多的自由,以古怪的方式布置你的'视图'...而不是只是垂直或水平。 – prolink007 2012-07-25 20:04:21

相关问题