2017-03-07 254 views
2

이 질문은 많은 질문을 던지기는하지만 처음입니다. 나는 모든 것을 조사했고 결과를 얻을 수 없었고 여기에 글을 올렸습니다.TableLow를 xml의 TableLayout에 동적으로 추가하기

TableLayout 부분이 xml 부분으로 작성된 테이블을 동적으로 생성합니다.

<RelativeLayout 
     android:layout_width="70dp" 
     android:layout_height="40dp" 
     android:background="@color/colorPrimaryDark" 
     android:id="@+id/componentA"> 
     <TableLayout 
      android:layout_width="match_parent" 
      android:layout_height="40dp" 
      android:gravity="center" 
      android:id="@+id/tl_componentA"> 


     </TableLayout> 

</RelativeLayout> 

는 내가 관련

createTableRowColumn(tableLayoutA); 

기능입니다

private void createTableRowColumn(TableLayout tableLayout){ 

     TableRow tableRow1= new TableRow(this.context); 
     tableRow1.setBackgroundColor(getResources().getColor(R.color.colorAccent)); 
     setTableRowColumnProperty(tableRow1); 
     tableLayout.addView(tableRow1); 
    } 

으로 앞으로 여기에서 동적으로 행을 추가하려고 지금

TableLayout tableLayoutA; 
tableLayoutA= (TableLayout)view.findViewById(R.id.tl_componentA); 

테이블에 대한 객체를 생성 개인 무효의 setTa bleRowColumnProperty (TableRow tableRow) {

TableRow.LayoutParams layoutParams= new TableRow.LayoutParams(70, 40); 
    tableRow.setLayoutParams(layoutParams); 
} 

나는이 모든 것을했고, 아무것도 emulater에서 저를 보이지 않았다. 하지만 XML에서 동일한 구조체를 수동으로 제공하면 실제로 잘 작동합니다.

는 이러한 이유로 나는 내가 XML 자체 tableLayoutA의 크기를 고정하고 있지만 0 내가 왜 얻을 수 없었다 저를 보여주는데 토스트에서

Toast.makeText(getContext(), tableLayoutA.getHeight()+"", Toast.LENGTH_LONG).show(); 

을 알아 내기 위해 뭔가를 시도했다.

+0

자세히 설명해 주시겠습니까? –

+0

어쨌든 나는 동적 인 것으로 이해한다. 데이터가 TableLayout에서 계속 변경 될 때, 말하고자하는 것은 무엇인가? 또는 –

+0

코드를 수정하고 내가 잘못하고있는 부분을 얻을 수 있도록 게시 할 수 있습니까? –

답변

2

실생활에서 사용되는 테이블에는 최소한 하나의 행과 하나의 열이 필요합니다. 행을 만들었으므로 열이 없으므로 테이블이 표시되지 않았습니다.

볼 수 있도록 행에 열을 추가해야합니다.

이 시도 :

TextView label_date = new TextView(this); 
    label_date.setText("DATE"); 
    label_date.setTextColor(Color.WHITE); 
    label_date.setPadding(5, 5, 5, 5); 
    tableRow.addView(label_date);// add the column to the table row here 

    tableLayout.addView(tableRow, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

당신은 당신이 원하는 무엇이든 값으로 텍스트 뷰를 대체 할 수 있습니다.

tableLayout.addView(tableRow, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

여기에 무슨 일 당신은 TableLayout을로보기를 추가, 말 그리고 당신은 그것이보고, 당신은 또한 뷰의 폭과 높이가 내용의 포장해야한다고하는 이야기입니다.

또한 40,70을 지정하는 것은 좋은 생각이 아닙니다. 화면 크기가 다양 할 때 어떻게됩니까? 또한 라이브러리를 사용하여 동적 뷰 추가 및 제거를 처리하십시오. 휠을 재발견 할 필요가 없으며 많은 시간과 노력을 절약 할 수 있습니다. 테이블보기의 경우 https://github.com/EsotericSoftware/tablelayout이 좋을 수도 있습니다 (확실하지 않음). 또 다른 질문은 당신이 찾고있는 테이블 뷰인가? 테이블 뷰를 위해 recyclerView를 착각하지 않았는지 확인하십시오. 유스 케이스를 이해하지 못하기 때문에 이것을 말합니다.

유용한 링크 : https://technotzz.wordpress.com/2011/11/04/android-dynamically-add-rows-to-table-layout/

+0

그게 전부입니다. 일어난 일을 설명해 주시겠습니까? 어떻게 작동하는지 설명하십시오. tableLayout.addView (tableRow, new ViewGroup.LayoutParams (ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); –

+0

내 대답이 유용하다면 투표하십시오 – rgv

+0

왜 TableRow.LayoutParams를 사용하지 않았습니까? –