Изменение размера родительского LinearLayout при программном добавлении кнопок - PullRequest
0 голосов
/ 10 января 2012

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

<LinearLayout
android:id="@+id/button_frame"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

</LinearLayout>

Затем я добавляю кнопки программно:

for (String text: textlist) {

        Button cbut = new Button(context);
        cbut.setText(text);
        cbut.setLayoutParams(new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        cbut.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Log.d(LOGTAGNAME, "TEST: " + buttonText);
            }
        });

        button_frame.addView(cbut);
        button_frame.invalidate();
    }

Это работает, пока кнопки не увеличивают ширину экрана. Так что я хочу, чтобы горизонтальная полоса прокрутки, если кнопки увеличивают ширину экрана. В качестве альтернативы может быть «разрыв строки» для кнопок внутри LinearLayout.

Я пробовал разные настройки, включая просмотр прокрутки вокруг списка, но я никогда не видел полосу прокрутки.

Так, может быть, моя проблема в том, что LinearLayout неправильно изменяет размеры? Что мне нужно сделать, чтобы LinearLayout пересчитывал ширину каждый раз после добавления вида? invalidate () не имеет никакого эффекта.

Спасибо за любую помощь.

Ответы [ 4 ]

1 голос
/ 10 января 2012

LinearLayout обеспечивает только "линейное" позиционирование видов;) Я имею в виду, что вы можете сделать так:

[btn1][btn2][btn3][btn4]

или как это:

[btn1]
[btn2]
[btn3]
[btn4]

Разница между двумя вариантаминаходится в android:orientation param.Для более сложных представлений вы должны использовать TableLayout или RelativeLayout.

Если вы хотите создать прокручиваемый вариант линейного макета, создайте следующую структуру:

<HorizontalScrollView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     ...any other params...>
    <LinearLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:orientation="horisontal"
         ...any other params.../>
</HorizontalScrollView>

и добавьте кнопки к линейному макету, как вы это делаете сейчас.

1 голос
/ 10 января 2012

Вы пробуете простой скроллвью или http://developer.android.com/reference/android/widget/HorizontalScrollView.html? Если вы не пытаетесь HorizontalScrollView, я думаю, что это должно помочь.

1 голос
/ 10 января 2012

попробуйте HorizontalScrollView и добавьте к нему кнопки.это будет прокручиваться автоматически при необходимости.для получения дополнительной помощи поделитесь полным кодом макета

1 голос
/ 10 января 2012

Попробуйте поместить линейный макет в горизонтальный обзор. Это должно обеспечить полосу прокрутки, когда кнопка превышает ширину экрана.

...