Android scrollview не может быть создан программно. - PullRequest
3 голосов
/ 09 октября 2011

Я хочу использовать scrollview в своем приложении.Я попытался добавить текстовое представление в представление прокрутки, но не вижу ничего визуализированного, кроме цвета фона представления прокрутки.

вот как я это сделал:

public class MyView extends ViewGroup
{
    ScrollView myScrollview;
        Textview tv;

        public MyView(Context context) { 
        myScrollView = new ScrollView(context);
        myScrollView.setBackgroundColor(0xfff00fff);

        textview=new TextView(context);

        textview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
                textview.setLayoutParams(params)
        textview.setText("sadfasdfasdfasdfasdfasdfasdfsadfsadf");

        textview.layout(0, 0, 1000, 2000);
        textview.setHeight(5000);
        textview.setWidth(3200);
                myScrollView .addView(tv);
                addView(myScrollview);
        }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        // TODO Auto-generated method stub

        int width = r-l;
        int height =b-t;

        myScrollView .layout(0, 0, width, height-100);
    }
}

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

Я скопировал xml Romain Guy отсюда для тестирования: http://www.curious -creature.org / 2010/08/15 / scrollviews-handy-trick /

xml scrollview сам по себе правильный,если я создаю это представление прокрутки и добавляю его в действие, используя

scrollview= (ScrollView)  getLayoutInflater().inflate(R.layout.scrollviewid,null);

setContentView (scrollview);

или setContentView(R.layout.scrollviewid);

, это сработало.Однако, если я хочу сделать представление прокрутки дочерним представлением какого-либо другого представления, снова я смогу видеть только фон представления прокрутки.внутри ничего не отображается:

     public class MyView extends ViewGroup
{
   ScrollView myScrollview;

    public MyView(Activity activity,Context context) 
    {
            super(context);

    myScrollview= (ScrollView)  activity.getLayoutInflater().inflate(R.layout.restaurantcategoryselectorviewlayout,null);
    myScrollview.setBackgroundColor(0xfff00fff);

    addView(myScrollview);
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    // TODO Auto-generated method stub

    int width = r-l;
    int height =b-t;

    myScrollview.layout(0, 0, width, height-100);
}
}

Что не так с моим кодом?Есть ли какой-нибудь пример создания scrollview с программой, отличной от xml?

Кроме того, эти java исходные коды android также есть на kernel.org?так как служба git не работает, где я могу скачать исходный код Android?

Ответы [ 2 ]

3 голосов
/ 17 мая 2012

Когда вы программно создаете ScrollView внутри него, вам нужно создать View, а затем добавить ScrollView внутри этого View.

LinearLayout maincontainer = (LinearLayout) findViewById(R.id.weatherInfo);
maincontainer.setOrientation(LinearLayout.HORIZONTAL);

final HorizontalScrollView scrollView = new HorizontalScrollView(getApplicationContext());
maincontainer.addView(scrollView);

final LinearLayout linearLayout = new LinearLayout(getApplicationContext());
linearLayout.setOrientation(LinearLayout.HORIZONTAL);

scrollView.addView(linearLayout);
1 голос
/ 10 октября 2011

Мне не ясно, что не так с вашей ViewGroup, но, похоже, именно в этом проблема.Если я беру ваш код, отлаживаю его (код, приведенный выше, содержит несколько ошибок), и помещаю его в стартовый код для простого действия, то он будет работать как положено.Он создает прокручиваемую текстовую область с вашим тестовым текстом.

Вот этот код.Обратите внимание, что ожидается, что файл макета будет содержать простой линейный макет с идентификатором linearLayout1:

public class ListTestActivity extends Activity {
LinearLayout layout;
ScrollView myScrollView;
TextView textview;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    layout = (LinearLayout) this.findViewById(R.id.linearLayout1);

    myScrollView = new ScrollView(this);
    myScrollView.setBackgroundColor(0xfff00fff);
    myScrollView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));


    textview = new TextView(this);
    textview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
    textview.setText("sadfasdfasdfasdfasdfasd fasdfsadfsadf");

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