Добавить несколько представлений в ScrollView?

Я работаю над приложением для Android. у меня проблема..

Вот мое приложение: введите здесь описание изображения

Розовый прямоугольник — это ScrollView. Я хочу добавить TextView в тот же ScrollView. Я знаю, что мне нужен LinearLayout и добавляю свои представления внутри этого макета. После того, как мне нужно добавить LinearLayout в мой ScrollView. Вот мой класс ScrollView с моими методами setClassicLabel для реализации TextView и setClassicButton для реализации Button в моем ScrollView.

Вот мой ScrollView.java :

public  class MyScrollView extends ScrollView {

private JSONParser  jParser;
private JSONObject  contenuScrollView;
private Context     context;

@SuppressLint("NewApi")
public MyScrollView(Context context, JSONArray listScrollView) throws JSONException {
    super(context);

    this.context = context;
}

public void onCreate(Bundle savedInstanceState) throws JSONException {
}

/* Création de TextView */
public void setClassicLabel(JSONArray listLabel, LinearLayout ll) throws JSONException {
        if (listLabel.length() > 0)
            {
            DisplayMetrics metrics = new DisplayMetrics();
            ll = new LinearLayout(getContext());
            ll.setOrientation(LinearLayout.VERTICAL);
            LinearLayout.LayoutParams paramsll = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

            for (int i = 0; i < listLabel.length(); i++) {

                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) (getContext().getResources().getDisplayMetrics().widthPixels * listLabel.getJSONObject(i).getDouble("size_x")),
                                                                                (int) (getContext().getResources().getDisplayMetrics().heightPixels * listLabel.getJSONObject(i).getDouble("size_y")));
                params.leftMargin = (int) (getContext().getResources().getDisplayMetrics().widthPixels * listLabel.getJSONObject(i).getDouble("position_x"));
                params.topMargin = (int) (getContext().getResources().getDisplayMetrics().heightPixels * listLabel.getJSONObject(i).getDouble("position_y"));
                TextView tv = new TextView(context);
                tv.setText(listLabel.getJSONObject(i).getString("text"));
                tv.setTextSize(listLabel.getJSONObject(i).getInt("police_size"));
                tv.setTextColor(Color.parseColor(listLabel.getJSONObject(i).getString("colortext")));
                tv.setBackgroundColor(Color.parseColor(listLabel.getJSONObject(i).getString("color")));
                ll.addView(tv, params);
            }
            this.addView(ll, paramsll);
        }
    }

@SuppressWarnings("deprecation")
public void setClassicButton(JSONArray listButton, LinearLayout ll) throws JSONException {
    if (listButton.length() > 0)
    {
    DisplayMetrics metrics = new DisplayMetrics();
    ll = new LinearLayout(getContext());
    ll.setOrientation(LinearLayout.VERTICAL);
    LinearLayout.LayoutParams paramsll = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    for (int i = 0; i < listButton.length(); i++) {
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) (getContext().getResources().getDisplayMetrics().widthPixels * listButton.getJSONObject(i).getDouble("size_x")), 
                (int) (getContext().getResources().getDisplayMetrics().heightPixels * listButton.getJSONObject(i).getDouble("size_y")));

        params.leftMargin = (int) (getContext().getResources().getDisplayMetrics().widthPixels * listButton.getJSONObject(i).getDouble("position_x"));
        params.topMargin = (int) (getContext().getResources().getDisplayMetrics().heightPixels * listButton.getJSONObject(i).getDouble("position_y"));

        int dest = listButton.getJSONObject(i).getInt("dest");
        MyButton myButton = new MyButton(context, dest);

        RoundRectShape rect = new RoundRectShape(
                  new float[] {50,50, 50,50, 50,50, 50,50},
                  null,
                  null);
                ShapeDrawable bg = new ShapeDrawable(rect);
                bg.getPaint().setColor(Color.parseColor(listButton.getJSONObject(i).getString("color")));

        myButton.setBackgroundDrawable(bg);
        myButton.setTextColor(Color.parseColor(listButton.getJSONObject(i).getString("colortext")));
        //BitmapDrawable bdra = new BitmapDrawable(downloadBitmap(listButton.getJSONObject(i).getString("http")));
        myButton.setText(listButton.getJSONObject(i).getString("text"));
        myButton.getBackground().setAlpha(30);
        myButton.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                MyButton button = (MyButton)view;
                Intent intent = new Intent(context, ClassicView.class);
                Content content = new Content(button.getDestination());
                intent.putExtra("CONTENT", content);

                context.startActivity(intent);
            }
        });
        ll.addView(myButton, params);
    }
    this.addView(ll, paramsll);
}
}
}

MyScrollView наследуется от ScrollView. Проблема в следующем:

Когда я создаю свой ScrollView с помощью метода setClassicScrollView, я вызываю свои методы setClassicLabel и setClassicButton для реализации этих двух представлений в моем ScrollView. Но я могу установить только кнопку или метку. Я не могу установить одну метку и одну кнопку. У меня проблема, кто исходит из макета. Я на нем два дня

Вот мой метод setClassicScrollView :

public void setClassicScrollView(JSONArray listScrollView, RelativeLayout rl) throws JSONException {
        if (listScrollView.length() > 0) {
            DisplayMetrics metrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(metrics);

            for (int i = 0; i  < listScrollView.length(); i++) {
                MyScrollView myScrollView = new MyScrollView(this, listScrollView);
                LinearLayout ll = new LinearLayout(this);
                ll.setOrientation(LinearLayout.VERTICAL);
                LinearLayout.LayoutParams paramsll = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams((int) (metrics.widthPixels * listScrollView.getJSONObject(i).getDouble("size_x")), (int) (metrics.heightPixels * listScrollView.getJSONObject(i).getDouble("size_y")));
                params.leftMargin = (int) (metrics.widthPixels * listScrollView.getJSONObject(i).getDouble("position_x"));
                params.topMargin = (int) (metrics.heightPixels * listScrollView.getJSONObject(i).getDouble("position_y"));
                myScrollView.setBackgroundColor(Color.RED);
                myScrollView.setLayoutParams(params);
                myScrollView.setHorizontalScrollBarEnabled(true);
                myScrollView.getMaxScrollAmount();
                myScrollView.getBackground().setAlpha(50);

                //myScrollView.setClassicLabel(listScrollView.getJSONObject(i).getJSONArray("Label"), ll);
                myScrollView.setClassicButton(listScrollView.getJSONObject(i).getJSONArray("Button"), ll);

                rl.addView(myScrollView);
            }
        }
    }

У кого-то есть идея, как я могу установить TextViews и Buttons в одном и том же ScrollView?


person Fcps    schedule 15.03.2014    source источник
comment
Как насчет использования ListView вместо этого?   -  person Yaroslav Mytkalyk    schedule 15.03.2014
comment
Почему бы просто не сделать это в самом макете? И затем кодируйте соответственно. Это будет так легко сделать, и дело не в том, что вы не сможете настроить его позже.   -  person mike20132013    schedule 15.03.2014
comment
Я не могу использовать ListView. Я просто хочу установить TextView и Buttons в одном и том же ScrollView.   -  person Fcps    schedule 15.03.2014
comment
@ mike20132013 Какой макет? Когда я пытаюсь установить два объекта, я получаю сообщение об ошибке: ScrollView может содержать только один дочерний элемент.   -  person Fcps    schedule 15.03.2014
comment
Очевидно. Представление прокрутки может содержать только одно дочернее представление. Посмотрите на мой ответ.   -  person mike20132013    schedule 15.03.2014
comment
Я не понимаю вашего ответа, о какой раскладке вы говорите?   -  person Fcps    schedule 15.03.2014
comment
Поместите все кнопки и прочее в ViewGroup и поместите эту ViewGroup в дочерний элемент ScrollView.   -  person Yaroslav Mytkalyk    schedule 15.03.2014


Ответы (1)


Вот схема просмотра с прокруткой.

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <Spinner
            android:id="@+id/spending_report_cycle_spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <View
            android:id="@+id/SomeView2"
            android:layout_width="wrap_content"
            android:layout_height="5dp"
            android:layout_gravity="center_horizontal"
            android:background="#008080"
            android:orientation="vertical" />

        <fragment
            android:id="@+id/fragment_content_1"
            android:name="com.mike.passintents.Fragment1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <View
            android:id="@+id/SomeView2"
            android:layout_width="wrap_content"
            android:layout_height="5dp"
            android:layout_gravity="center_horizontal"
            android:background="#008080"
            android:orientation="vertical" />

        <ListView
            android:id="@+id/spending_report_listview"
            android:layout_width="fill_parent"
            android:layout_height="300dp"
            android:background="#333333" >
        </ListView>
    </LinearLayout>
</ScrollView>

Here.. In the scroll view, I have one linear layout as one child and after that I have other views inside the linear layout.

person mike20132013    schedule 15.03.2014
comment
У меня нет xml. Я все создал программно - person Fcps; 15.03.2014
comment
Я просто предлагаю вместо того, чтобы делать все программно, почему бы просто не сделать в макете, как показано выше. - person mike20132013; 15.03.2014
comment
Что именно пытаются сделать в вашем приложении? - person mike20132013; 15.03.2014
comment
Я установил свои представления в своей деятельности с файлом json. У меня есть файл json, в котором я создаю свои представления. - person Fcps; 15.03.2014