2013-01-10 10 views
0

맞아, 이건 내가 지금 잠시 동안 놀랐던 이상한 문제 야, 잘하면 어쩌면 내가 너희들이 내주의를 끄는 뭔가를 놓치고있어!Android : LinearLayout은 가중치를 사용하여 간격 때문에 사라 집니까?

LinearLayouts 일단보기를 사용하여 간격을 추가하고 무게를 정의하면 (프로젝트의 다른 곳에서 작동하는 방법) 일단 사라지는 것처럼 보입니다.

나는 custom Dialog (확장 대화 상자)입니다. onCreate()에서는 세로 형 LinearLayout을 반환하는 setContentView(generateDialog()) 메서드를 사용합니다.

LinearLayout에는 네 개의 사용자 정의 범주 단추 (LinearLayouts), 정렬 단추 (LinearLayouts) 한 행 및 나머지 대화 상자를 채우고 단추를 눌렀을 때 새로 고치는 ListView 세 개의 요소가 있습니다.

모두 제대로 작동합니다.

Dialog.java :

LinearLayout catBtns = new LinearLayout(context); 
     catBtns.setOrientation(LinearLayout.HORIZONTAL); 
     catBtns.setBackgroundResource(R.drawable.btn_cat_gradient_bg); 
     catBtns.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); 

     catBtns.addView(space(1)); 
     cat1Btn = new CatButton(context,this,act,"CAT1"); 
     catBtns.addView(cat1Btn); 
     catBtns.addView(space(1)); 
     cat2Btn = new CatButton(context,this,act,"CAT2"); 
     catBtns.addView(cat2Btn); 
     catBtns.addView(space(1)); 
     cat3Btn= new CatButton(context,this,act,"CAT3"); 
     catBtns.addView(cat3Btn); 
     catBtns.addView(space(1)); 
     cat4Btn = new CatButton(context,this,act,"CAT4"); 
     catBtns.addView(cat4Btn); 
     catBtns.addView(space(1)); 

공간() 메소드 :

private View space(int space) { 
    View view = new View(context); 
    LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(0,0); 
    p.weight = space; 
    view.setLayoutParams(p); 
    return view; 
} 

무엇 나를 혼란 나는 균등 내 스페이서 방법을 사용하여 공간의 버튼을 시도 할 때를 제외하고 내가이 방법을 프로젝트 전체에서 사용했기 때문에 각 버튼 사이에 스페이서를 추가 할 때 왜 카테고리 LinearLayout이 완전하게 사라지는 지 찾을 수 없습니다.

정렬 버튼과 동일한 기술을 사용하며 완벽하게 작동합니다! 동일한 기술을 동일한 버튼의 약간 다른 버전을 사용하여 프로젝트의 다른 부분에서 사용합니다 (다른 클래스 파일인데, 왜냐하면 onClickListener와 다른 것들은 약간 다릅니다)

아무도 실마리가 있습니까?

답변

0

XML로 작성하려고했는데 제대로 작동합니다. 가능한 차이는 버튼에 LayoutParams을 설정하지 않았다는 것입니다. 모든 버튼 그런 일을 시도 버튼 클래스에서

cat1Btn = new CatButton(context,this,act,"CAT1"); 
catBtns.addView(cat1Btn, new LinearLayout.LayoutParams(0,0)); 
+0

을 내가 같이가의 LayoutParams을 설정 LinearLayout.LayoutParams btnLayoutParams = 새로운 LinearLayout.LayoutParams에게 (LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); \t \t this.setLayoutParams (btnLayoutParams); 그러나 나는 당신이 제안한 것을 시도했지만, 주사위는 두려워하지 않았습니다. 이상한 간헐적 인 문제! – htvisttj

+0

해결책을 찾았습니다! 간접적으로 Ridicully에게 감사드립니다. 앞서 언급 한 LayoutParams를 CatButton 클래스에 할당 한 것을 주석 처리했으며 수정 한 것 같습니다. 이것이 제가 다른 클래스에서 사용했던 정확한 방법인데도 불구하고이 클래스는 LayoutParams를 가지고있는 것을 좋아하지 않습니다. 당신의 도움을 주셔서 감사합니다 – htvisttj

관련 문제