2014-04-24 4 views
1

Я пытаюсь разработать аналогичную сетку, но используя LinearLayout. Я хотел бы иметь 3 изображения и точный нижний текст после изображений в одной строке.Программно LinearLayout Вес

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 (новые LinearLayout.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); '. 'F' означает' float', поэтому в этом случае это будет вес '1'. Вам нужно будет поиграть с этим, чтобы получить желаемый эффект. – nKn

+0

Да, я уже пробовал \t \t layout.setLayoutParams (новый LinearLayout.LayoutParams (LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); но это не работает для меня. –

+0

'Это не работает для меня' - очень широкая концепция. Объясните * почему * он не работает, чего вы хотите достичь и какой результат вы получаете. – nKn

ответ

0

Я бы определил TableLayout с таким количеством TableRow s, сколько вам нужно. На каждом из этих TableRows я бы добавил LinearLayout с ориентацией VERTICAL, состоящей из двух View s, которые вам нужны: ImageView и TextView.

Это LinearLayout, где вы должны установить вес 1 (для всех них). Вам нужно будет получить ширину экрана и посмотреть, будет ли добавляться новый LinearLayout, который по-прежнему подходит для текущей строки. Если нет, просто запустите новый TableRow.

Чтобы получить ширину экрана, вы можете использовать это:

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

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

ширина экрана может быть доступен через атрибут params.width, просто сравнить его с .getWidth() методом ваши LinearLayout «ы и держать инкрементный счет (a float) текущей ширины TableRow, чтобы помочь вам определить, должен ли текущий элемент быть помещен в существующую строку или новую.

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

Спасибо за ответ, но у меня уже есть googled, но эти двое не работают на меня. –

0

Programmtically установка линейного компоновщика вес LinearLayout.LayoutParams Param = новые LinearLayout.LayoutParams (LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f);

Смежные вопросы