2012-09-20 3 views
1

레이아웃을 동적으로 가운데 맞춤해야하지만 레이아웃을 추가하는 데 inflate 메소드를 사용하는 것이 문제입니다. 그리고 버튼을 중심으로하고 싶습니다.Android 레이아웃을 부 풀릴 때 동적으로 버튼 중앙에 배치

중력, 레이아웃 _ 그라비티와 같은 xml 속성을 추가하려고했습니다. 그러나 그것은 효과가 없었습니다. 그리고 매개 변수를 추가하려고 시도했지만 xml을 부풀리기 때문에 매개 변수를 추가 할 수 없습니다. addRule 메서드를 사용할 수 없기 때문에.

그런 다음 루트 레이아웃에 중력 속성을 추가하여 모든 요소 중심을 만들려고했으나 해결되지 않았습니다.

여기 내 코드가 있습니다.

actvity_main.xml

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

    <SurfaceView 
     android:id="@+id/surfaceView1" 
     android:layout_width="match_parent" 
     android:layout_height="335dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" /> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:id="@+id/buttons_layout" 
     android:layout_below="@+id/surfaceView1" 
     > 

     <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="29dp" 
     android:text="Button" /> 

    </RelativeLayout> 



</RelativeLayout> 

three_buttons_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="29dp" 
     android:text="Button 1" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="29dp" 
     android:text="Button 2" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button 3" /> 

</LinearLayout> 

그리고 여기 내 자바 코드 나는 중심으로 Button1을, Button2를 및 Button3을 원하는

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

    inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    parent = (ViewGroup)findViewById(R.id.buttons_layout); 

    captureButton.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     camera.takePicture(null, null, photoCallback); 
     captureButton.setVisibility(View.GONE); 
     inflater.inflate(R.layout.three_buttons_layout, parent, true); 
      } 
     }); 

입니다.

screenshot

+0

당신의 LinearLayout의 안드로이드를 줄 : layout_width = "fill_parent" –

+0

당신을합니까를 버튼을 수평 중심으로 배치하거나 화면 중앙에 배치하고 싶습니까? – smok

+0

나는 그 (것)들을 수평하게 중심에두고 싶다. –

답변

2

수평의 LinearLayout은 항상 왼쪽 정렬됩니다의 파단. 원하는 위치 지정을 얻으려면 RelativeLayout을 사용해야합니다. layout_alignParentLeft 속성 단추 2 안드로이드 : layout_centerHorizontal 속성과 안드로이드 단추 3 : 나는 안드로이드를 button1을주는 게 좋을 것 같은 layout_alignParentRight 속성 :

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

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_marginBottom="29dp" 
    android:text="Button 1" /> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="29dp" 
    android:text="Button 2" /> 

<Button 
    android:id="@+id/button3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:text="Button 3" /> 

</RelativeLayout> 

가 (난 그냥 주석 편집기에서 코드를 편집하고 있습니다를, 그래서 어딘가에서 구문 오류가있을 수 있지만 아이디어를 얻을 수 있습니다.)

또한 뷰를 부 풀린 다음 해당 버튼에 원하는 속성을 설정할 수 있어야합니다. findViewById (R.id.button1)를 호출하면 원하는 뷰가 반환됩니다 (inflater.inflate 호출 이후). 그 메모에서 모든 버튼에 동일한 ID를 부여 했으므로 아마도 좋은 생각이 아닙니다.

희망 하시겠습니까? 아직 작동하지 않는다면 알려주세요.

편집 : 나는 당신이 android : layout_width = "match_parent"를 갖기 위해 RelativeLayout이 필요하다는 것을 깨달았습니다. 내가 위의 XML을 적절하게 편집했습니다.

+1

감사합니다. 너 좋아. 그것은 효과가있다! –

1

//이

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:gravity="center" 
    > 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button 1" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button 2" /> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button 3" /> 

</LinearLayout> 

// 당신의 부모로부터 선 아래이를 제거 할 수있는 것은 센터로 만들려고 수평

android:layout_gravity="center" 
+0

답장을 보내 주셔서 감사합니다. –