2012-07-31 227 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);