2012-07-31 228 views
1

关于动态设置按钮的位置有很多问题,但我只是想将按钮的位置改变到屏幕的中心。我的布局是RelativeLayout。Android:在RelativeLayout中动态设置按钮的位置到屏幕的中心

更新时间:

在开始的时候,则myButton已定在XML位置:

<Button 
     android:id="@+id/myButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:text="Menu" /> 

任何建议,将不胜感激

回答

4

请参见下面的例子(点击按钮,它将被移到中心)。

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <Button 
     android:id="@+id/my_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:text="Menu" /> 

</RelativeLayout> 

MainActivity.java

public class MainActivity extends Activity { 
    private View mView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mView = findViewById(R.id.my_view); 
     mView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ViewGroup.LayoutParams vg_lp = mView.getLayoutParams(); 

       // Make sure we are in RelativeLayout 
       if (vg_lp instanceof RelativeLayout.LayoutParams) { 
        RelativeLayout.LayoutParams rl_lp = new RelativeLayout.LayoutParams(vg_lp); 
        rl_lp.addRule(RelativeLayout.CENTER_IN_PARENT); 
        mView.setLayoutParams(rl_lp); 
       } 
      } 
     }); 
    } 
} 
+0

我将我当前的视图分配为my_view,但按钮仍然不动。它保持与上面的XML – DavidNg 2012-07-31 13:01:36

+0

@DavidNg中的相同位置,我编辑了我的答案并添加了完整的代码清单。这个对我有用。再试一次或发布完整的代码清单。 – StenaviN 2012-07-31 13:14:24

0

尝试:

 ...... 
     RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) button.getLayoutParams(); 
     layoutParams.leftMargin = parentLayout.getWidth()/2; 
     layoutParams.topMargin = parentLayout.getHeight()/2; 
     button.setLayoutParams(layoutParams); 
     ...... 
+0

我设置:RelativeLayout的parentLayout =(RelativeLayout的)findViewById(R.layout.mylayout);与您的代码,我的程序崩溃。我错了吗? – DavidNg 2012-07-31 13:07:36

0

试试这个:

RelativeLayout RL = (RelativeLayout)findViewById(R.id.relative_layout); 
    RL.gravity(Gravity.CENTER); 

与RL的所有子视图将在中心;

Button anyButton = new Button(this); 
    RL.addSubview(anyButton);//this genereted button will be in center as well 
+0

我相信你的代码有bug – DavidNg 2012-07-31 13:18:46

0

这2行添加到您想要在xml文件中间的部件:

android:layout_centerHorizontal="true" 
android:layout_centerVertical="true" 
+0

它不是这个,我知道这一点,谢谢 – DavidNg 2012-07-31 12:58:37

0

试试这个,

RelativeLayout my_layout = new RelativeLayout(this); 
my_layout.setId(some_value); 
Button my_btn = new Button(this); 
RelativeLayout.LayoutParams my_params = new RelativeLayout.LayoutParams(btn_height,btn_width); 
my_params.addRule(RelativeLayout.CENTER_IN_PARENT,my_layout.getId()); 
my_layout.addView(my_btn,my_params);