Android: добавление макетов в HorizontalScrollView - PullRequest
0 голосов
/ 15 июля 2011

Я пытаюсь создать что-то похожее на макет домашнего экрана.Он состоит из нескольких вертикально ориентированных LinearLayout в одном горизонтально ориентированном LinearLayout, все они размещены в HorizontalScrollView.Я написал его как пользовательский класс с именем «HomeLayout», расширяющий HorizontalScrollView.

hierarchyviewer

LinearLayout wrapper = new LinearLayout(getContext());
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
wrapper.setLayoutParams(params);
wrapper.setOrientation(LinearLayout.HORIZONTAL);

addView(wrapper);

for(int i = 0; i < 2; i++) {
    LinearLayout linear = (LinearLayout) View.inflate(getContext(), R.layout.screens, null);    
    linear.setLayoutParams(params);

    wrapper.addView(linear);
}

Проблема заключается в том, что «screen2» имеет ширину «0» при добавлении.

Это работает, только если я вызываю это в onDraw () и использую getMeasuredWidth () и getMeasuredHeight () вместо LayoutParams.FILL_PARENT.И даже тогда я не уверен, что это правильно.

Более того, я не могу ссылаться на представления 'wrapper', 'screen1', 'screen2' в onCreate ().

Я свободно перешел по этой ссылке: http://blog.velir.com/index.php/2010/11/17/android-snapping-horizontal-scroll/

Что я делаю не так?

1 Ответ

0 голосов
/ 15 июля 2011

Надеясь, что это помогает другим.Я решил свою проблему, реализовав onMeasure () следующим образом:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    setMeasuredDimension(width, height);

    for(int i = 0; i < mWrapper.getChildCount(); i++) {
        View child = mWrapper.getChildAt(i);
        child.setLayoutParams(new LinearLayout.LayoutParams(width, 
        LayoutParams.FILL_PARENT));
    }

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...