2012-05-30 2 views
2

나는 RelativeLayout을 가지고 있으며 일부 textViews를 삽입하고 싶습니다. 여기 Android : RelativeLayout의 textViews를 프로그래밍 방식으로 추가

코드입니다 :

<RelativeLayout 
    android:id="@+id/JournalSearchListView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="30dp" 
    android:layout_below="@+id/JournalsSearchTextView" 
    android:orientation="vertical" 
    android:cacheColorHint="#00000000"> 

    <ProgressBar 
     android:id="@+id/JournalSearchProgressBar" 
     style="?android:attr/progressBarStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" /> 

</RelativeLayout> 

그리고 어떻게 프로그래밍 방식으로이 일을하고있다 :

RelativeLayout journals = (RelativeLayout) findViewById(R.id.JournalSearchListView); 
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
for (int i=0;i< authorNames.size();i++) { 
    TextView tv = new TextView(this); 
    tv.setId(i); 
    tv.setText(authorNames.get(i)); 
    tv.setTextColor(Color.BLACK); 
    Integer a = tv.hashCode(); 
    map.put(a,authorNames.get(i)); 
    params1.addRule(RelativeLayout.BELOW, tv.getId()); 
    journals.addView(tv, params1); 
    tv.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      System.out.println("Clicked "+ map.get(v.hashCode()));  
     } 
    }); 
} 

그러나 문제는 각 텍스트 뷰는 다른 사람과 같은 위치에있는 것입니다.

답변

5

params1.addRule(RelativeLayout.BELOW, tv.getId());

당신은 그 자체 이하로 설정하는?

RelativeLayout journals = (RelativeLayout); 
findViewById(R.id.JournalSearchListView); 
LinearLayout lL = new LinearLayout(context); 
lL.setOrientation(LinearLayout.VERTICAL); 

for (int i=0;i< authorNames.size();i++) { 
    TextView tv = new TextView(this); 
    tv.setId(i); 
    tv.setText(authorNames.get(i)); 
    tv.setTextColor(Color.BLACK); 
    Integer a = tv.hashCode(); 
    map.put(a,authorNames.get(i)); 

    if(i!=0){ 
     params1.addRule(RelativeLayout.BELOW, i-1); 
    } 

    tv.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      System.out.println("Clicked "+ map.get(v.hashCode())); 
     } 
    }); 

    lL.addView(tv); 

} 

journals.addview(lL); 
+0

Andreas에게 감사하지만 문제는 지속되며 아무런 변화가 없습니다 ... –

+0

좋아요, 왜 당신은 왜 relativelayout을 사용하고 싶습니까? 원하는 경우 서로 아래에 항목을 배치하는 것입니다. 선형 레이아웃을 사용하십시오. 그리고 내 이름은 Anders가 아니라 Andreas :-) –

+0

오, 미안 Anders, 내 실수. 선형 레이아웃에서는 가능하지 않은 레이아웃 중간에 배치 된 내 레이아웃에 progressBar가 있기 때문에 상대 레이아웃을 사용하고 싶습니다. –

0

같은
RelativeLayout layout = (RelativeLayout)findViewById(R.id.slidingDrawerContent); 
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 


    for (int i=0; i<4; i++) { 
     Button btn = new Button(this); 
     btn.setId(i); 
     btn.setText("some_text"); 

     lp.addRule(RelativeLayout.RIGHT_OF, <Id>); 

     layout.addView(tv2, lp); 
    } 
+0

내가 Dheeresh 당신이 이해하지 않는 ... –

+0

가 basicaly 라인 lp.addRule의 주석 (RelativeLayout의를 : 서로가이 방법을 아래에
은 당신이 그들을합니다. RIGHT_OF, ); RelativeLayout에서 알 수 있듯이 다른보기와 관련하여 자신의보기를 정렬하므로 다른보기 ID를 부여해야하므로 을 제공합니다. –

+0

http://stackoverflow.com/questions/10814718/android-add-textviews- in-relativelayout-programmatically/10814759 # 10814759 –

1
params1.addRule(RelativeLayout.BELOW, tv.getId()); 
journals.addView(tv, params1); 

이 기본적으로 말한다 "자체 아래 장소 텍스트 뷰"를 addRule 기능을 사용할 수 있습니다. 물론 작동하지 않으므로 모든 뷰가 RelativeLayout 내의 기본 위치를 차지합니다. 이전에 추가 한 TextView의 ID를 (또는 첫 번째 요소를 삽입하는 경우 진행률 표시기)으로 변경하십시오.

+0

알렉스, 고맙지 만 안드레아스의 방법을 성공하지 않으려 고 노력 중입니다. –

1
// Every UI object must have a layout parameter 
     int widthContent = RelativeLayout.LayoutParams.WRAP_CONTENT; 
     int heightContent = RelativeLayout.LayoutParams.WRAP_CONTENT; 

     // Create relative layout 
     RelativeLayout.LayoutParams rlParamsName = new RelativeLayout.LayoutParams(widthContent,heightContent); 
     rlParamsName.setMargins(10, 0, 0, 0); 

     // Create a linear layout to add new object as vertical 
     LinearLayout lL = new LinearLayout(context); 
     lL.setOrientation(LinearLayout.VERTICAL); 

     for (int i=0;i< 3;i++) { 

      // Every time create new object of text view 
      TextView objDonateTextView = new TextView(this); 
      objDonateTextView.setLayoutParams(rlParamsName); 
      objDonateTextView.setText("Donate"); 
      objDonateTextView.setId(i); 
      objDonateTextView.setTypeface(null, Typeface.BOLD); 
      objDonateTextView.setTextColor(0xFF000000); 

      lL.addView(objDonateTextView); 

     } 

     //Add button number two to the activity. 
     RelativeLayout rl = (RelativeLayout)findViewById(R.id.row_special); 
     rl.addView(lL); 

// vKj

관련 문제