1

여러 뷰 (예 : TextView, ProgressBar)를 사용하여 RelativeLayout을 동적으로 생성하는 방법을 알아 내려고 노력하고 있습니다. LinearLayout을 사용하여 매번 이전의 RelativeLayout을 만듭니다. 버튼을 클릭하십시오. 누구든지 내 코드를보고이 문제를 해결하기 위해 내가 할 수있는 일이 있는지 확인하십시오. 여기 RelativeLayout을 Android의 LinearLayout에 동적으로 추가합니다.

코드입니다 : 나는 완전히 확실하지 않다

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/frag1ScrollView"   
android:layout_width="fill_parent" 
android:layout_height="wrap_content" > 

<LinearLayout 
android:id="@+id/testLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".TestContainerActivity" > 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/testContainerTextView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/testContainerTextView1" 
     android:layout_marginBottom="16dp" 
     android:text="TextView2" /> 

    <TextView 
     android:id="@+id/testContainerTextView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:text="TextView1" /> 

    <Button 
     android:id="@+id/testContainerButton1" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/testContainerTextView2" 
     android:text="Button" /> 
</RelativeLayout> 

</LinearLayout> 

</ScrollView> 

container.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/containerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="80dp" 
    android:paddingBottom="10dp" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:layout_marginBottom="16dp" 
    android:background="@color/display_panels" > 

<ProgressBar 
    android:id="@+id/containerProgressBar1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_toLeftOf="@+id/containerImageButton2" 
    android:max="100" 
    android:progress="40" /> 

<TextView 
    android:id="@+id/containerTextView4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/containerTextView6" 
    android:layout_alignLeft="@+id/containerProgressBar1" 
    android:text="" 
    android:textAppearance="?android:attr/textAppearanceSmall" /> 

<TextView 
    android:id="@+id/containerTextView6" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/containerProgressBar1" 
    android:layout_centerHorizontal="true" 
    android:text="" 
    android:textAppearance="?android:attr/textAppearanceSmall" /> 

<ImageButton 
    android:id="@+id/containerImageButton2" 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_below="@+id/containerTextView6" 
    android:background="@color/display_panels" 
    android:contentDescription="Okay icon" 
    android:src="@drawable/ic_green_ok" /> 

</RelativeLayout> 

TestContainerActivity.java

public class TestContainerActivity extends Activity implements OnClickListener { 

LinearLayout containerLayout; 
Button testButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test_container); 

    testButton = (Button)findViewById(R.id.testContainerButton1); 
    containerLayout = (LinearLayout)findViewById(R.id.testLayout); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.test_container, menu); 
    return true; 
} 


@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    if(v==testButton){ 

     createNewLayout(); 

    } 
} 

public void createNewLayout(){ 

     LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View addView = layoutInflater.inflate(R.layout.container, null); 

     containerLayout.addView(addView); 

} 

} 

답변

2

activity_test_container.xml 무엇 너는 프로 야. 흠이 있지만, 버튼에 리스너를 부착 한 곳을 볼 수 없기 때문에 행이 전혀 표시되지 않는다고 생각됩니다. 클릭 이벤트를 처리하려면보기에 OnClickListener을 설정해야합니다. 단추를 사용하여 일반적으로 수행되지만 OnClickListeners는 모든보기에서 설정할 수 있으므로 모든 크기/모양 위젯을 클릭 할 수 있습니다. 이는 뷰의 setOnClickListener 메소드로 수행됩니다. 이처럼 onCreate 수정하려고이 작업을 수행하는 여러 가지 방법이 있습니다

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test_container); 

    testButton = (Button)findViewById(R.id.testContainerButton1); 
    containerLayout = (LinearLayout)findViewById(R.id.testLayout); 

    testButton.setOnClickListener(this); 
} 

onCreate에 리스너를 생성하는 것 리스너를 설정하기보다는 활동 사용하는 다른 방법 :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test_container); 

    testButton = (Button)findViewById(R.id.testContainerButton1); 
    containerLayout = (LinearLayout)findViewById(R.id.testLayout); 

    testButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      createNewLayout(); 
     } 
    }); 
} 

을 이 경우 Activity에 OnClickListener를 구현하지 않아도됩니다. 비슷한 기능을 가진 많은 버튼이있는 경우, 보통 각각의 리스너를 생성하면 성능이 저하 될 수 있습니다. 이처럼 더 고립 된 경우에는 개별적인 Listener를 설정하는 것을 선호합니다. 성능 차이는 무시할 수 있지만 개인적인 취향입니다.

희망이 도움이됩니다. 문제가 실제로 다른 곳을 기반으로했다면 질문을 수정 해주세요. 최선을 다해 도와 드리겠습니다. 또한 the Log class을 사용하여 LogCat 출력에서 ​​실행에 대한 정보를 게시 할 수 있습니다. 디버깅에 도움이됩니다! 나는 청취자에게 약간의 로깅을하고, 바로 createNewLayout()을 넣는다면, 그러한 메소드가 결코 호출되지 않기 때문에 로깅이 결코 일어나지 않을 것이라고 생각한다.

+0

감사합니다. 청취자를 추가하지 않았다는 사실을 깨닫지 못했다고는 믿을 수 없지만 편집 할 때 우연히 삭제해야합니다. 컨테이너의 크기에는 여전히 문제가 있습니다. 추가 할 때 버튼 클릭으로 원하는만큼 추가 할 수 있지만 'layout_marginBottom = "16dp"'및 'layout_height = "80dp"'모두 container.xml에서 작동하지 않습니다. 왜 이것이 될 수 있는지에 대한 아이디어가 있습니까? 당신의 도움을 주셔서 대단히 감사합니다! –

+0

방금 ​​높이 문제를 해결했지만 'layout_marginBottom = "16dp"'이 여전히 작동하지 않습니다. –

+0

나는 그것을 알아 냈다. 그 대신에 '패딩 보텀'이 되어야만했다. –

관련 문제