2014-04-24 7 views
1

그리드와 비슷하지만 LinearLayout을 사용하여 개발하고 있습니다. 한 줄에 이미지를 넣은 후 3 개의 이미지와 정확한 하단 텍스트를 갖고 싶습니다. 내가 시도 무엇프로그래밍 방식 LinearLayout Weight

enter image description here

는 :

LinearLayout layout = new LinearLayout(context); 
    layout.setOrientation(LinearLayout.VERTICAL); 

    ImageView icon = new ImageView(context); 
    Item item = getItem(page, index); 
    Log.e("tag", item.getDrawable()); 
    imageLoader.displayImage(item.getDrawable(), icon, R.drawable.ic_launcher); 
    icon.setPadding(15, 15, 15, 15); 

    layout.addView(icon); 

    TextView label = new TextView(context); 
    label.setTag("text"); 
    label.setText(item.getName()); 
    label.setTextColor(Color.BLACK); 
    label.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL); 

    label.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 

    layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    layout.setWeightSum(3f); 
    layout.addView(label); 

내가 View을 반환하는보기 방법을했습니다 그래서이 방법의 끝에서 return layout;을 반환합니다. 여기 체중 3 버튼이 나에게 효과가 없습니다. 코드는 텍스트가있는 행에 3 개 이상의 이미지를 표시하지만 무게가 3 인 이미지와 아래쪽 텍스트를 원합니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

'LayoutParams' 생성자에서 세 번째 매개 변수로 가중치를 지정할 수 있습니다. 예를 들어,'layout.setLayoutParams (new LinearLayout.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); '. 'f'는'float'의 약자로,이 경우'1'의 가중치가됩니다. 원하는 효과를 얻으려면 이것으로 놀아야합니다. – nKn

+0

예, 이미 시도했습니다 \t \t layout.setLayoutParams (new LinearLayout.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); 그러나 이것은 나를 위해 일하지 않습니다. –

+0

'이것은 나를 위해 일하지 않습니다.'는 매우 광범위한 개념입니다. * 왜 * 작동하지 않는지, 달성하고자하는 것, 그리고 어떤 결과를 얻고 있는지 설명하십시오. – nKn

답변

0

나는 TableRow만큼 필요한만큼 TableLayout을 정의 할 것입니다. 각각 TableRowsLinearLayoutVERTICAL 오리 엔테이션을 추가하면 두 개의 View (ImageViewTextView)이됩니다.

여기는 LinearLayout이고, 여기에는 1의 가중치를 설정해야합니다. 화면 너비를 가져와 새로 추가 된 LinearLayout이 여전히 현재 행에 맞는지 확인해야합니다. 그렇지 않은 경우 새로운 TableRow을 시작하기 만하면됩니다.

은 당신이 사용할 수있는 화면의 폭을 효율적으로 활용하려면 다음

final Display display = getWindowManager().getDefaultDisplay(); 
final Point size = new Point(); 
display.getSize(size); 

final WindowManager.LayoutParams params = getWindow().getAttributes(); 

화면의 폭은, 당신의 LinearLayout.getWidth() 방법과 비교하고 (증분 계정을 유지하려면 params.width 속성을 통해 액세스 할 수 있습니다 현재 TableRow의 너비의 현재 값 (예 : float)을 사용하면 현재 항목을 기존 행이나 새 행에 배치해야하는지 확인할 수 있습니다.

1
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
          LayoutParams.MATCH_PARENT, 
          LayoutParams.MATCH_PARENT, 1.0f); 

또는

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); 
params.weight = 1.0f; 
Button button = new Button(this); 
button.setLayoutParams(params); 
+0

답변을 주셔서 감사합니다하지만 난 이미 봤지만이 두 가지는 나를 위해 작동하지 않습니다. –

0

Programmtically 선형 레이아웃 중량을 LinearLayout.LayoutParams PARAM = 새로운 LinearLayout.LayoutParams (LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0F)을 설정하는 단계;