2013-07-09 3 views
0

현재 레이아웃 생성 코드로 약간 놀고 있습니다. 가 나는 코드의이 부분에 문제가 recogniced :이 라인은 모든 주석 LayoutParams로 이상한 비젼

i.setLayoutParams(new LayoutParams(dp_x, dp_x)); 

가 올바르게 표시됩니다
dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
int dp_x = (dm.widthPixels - 32)/10; 

for(int x = 0; x < 9; x++) { 
    TableRow tr = new TableRow(this); 
    tr.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
             LayoutParams.WRAP_CONTENT)); 
    for(int y = 0; y < 9; y++) { 
     ImageView i = new ImageView(this); 
     i.setClickable(true); 
     i.setLayoutParams(new LayoutParams(dp_x, dp_x)); 
     i.setScaleType(ScaleType.FIT_XY); 
     i.setImageDrawable(getResources().getDrawable(R.drawable.i0)); 
     iv[x][y] = i; 
     tr.addView(iv[x][y]); 
    } 
    fieldLayout.addView(tr); 
} 

는 특히이 라인은 문제가 발생할 것으로 보인다. 그러나 주석을 제거하자마자 ImageViews 중 하나가 표시되지 않습니다. 디버깅을 살펴본 결과 모든 값이 ImageView에 올바르게 추가 된 것 같습니다. 아이디어,이 오류의 원인은 무엇입니까?

또 다른 것은 - DisplayMetrics와 너비/높이를 사용하는 것이 좋습니다. 여기서는 디스플레이에 따라 ImageViews의 크기를 조절하는 데 사용합니다. 다른 방법으로도이를 수행 할 수 있습니까?

+1

모든 아이디어,이 오류의 원인은 무엇입니까? * - 항상 적절한 LayoutParams (부모의 경우 'LayoutParams' 대신에 귀하의 경우'TableRow')를 사용하십시오. – Luksprog

+0

좋습니다. 그 정보를 가져 주셔서 감사합니다. –

답변

1

가정하여 dp_xdp_y 값이 올바른지 :

TableRow.LayoutParams layoutParams = new TableRow.LayoutParams(dp_x, dp_y); 
i.setLayoutParams(layoutParams); 

아무것도 변경하지 않는 것 같아하지만 나를 위해 일한! layoutParams가 더 구체적이기 (TableRow.LayoutParams)

희망이 있습니다.

+0

오른쪽, TableRow.LayoutParams() 실제로 작동했습니다. 나는 부모님의 특정한 것을 사용해야 만한다는 것을 몰랐다. ... –

+0

다행스럽게 도울 수 있었다! LinearLayout을 TableRow로 변경하여보다 정확한 답변을 제공합니다. –