Как установить несколько gridview в том же макете в android?

Я хочу установить два вида сетки для того же макета. Я также могу установить это в пределах того же плана, но из-за прокручиваемого управления его вид выглядит как "wrap_content".

но я хочу показать полный вид сетки на экране один за другим, как показано ниже. enter image description here

на рис. вид сетки показывает его полную высоту. поэтому, пожалуйста, помогите мне.

Спасибо.

Ответ 1

ПОПРОБУЙТЕ ЭТО:

public void createTableRow_you(int no) {


          tr_u = new TableRow(this);
          LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT
                  , LayoutParams.WRAP_CONTENT);

          tr_u.setLayoutParams(lp);
          tr_u.setWeightSum((float) 1.0);
          tr_u.setPadding(10, 0, 10, 0);
          tr_u.setGravity(Gravity.CENTER_VERTICAL );

          ImageView img1= new ImageView(this);
          //img1.setLayoutParams(lp);
          img1.setPadding(10, 10, 10, 10);

         // img1.setScaleType(ScaleType.FIT_XY);

          if (density == DisplayMetrics.DENSITY_HIGH) {
              img1.setLayoutParams(new TableRow.LayoutParams(125, 125 ));

          }else {
              img1.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

          }

          if (no < photo_icon_u.size()) {
              img1.setImageDrawable(photo_icon_u.get(no));
              img1.setId(Integer.parseInt(photoID_profile.get(no)));
              img1.setClickable(true);
              img1.setOnClickListener(this);
              img1.setTag("profile");

          }else {
              img1.setImageResource(R.drawable.icon);
              img1.setVisibility(View.GONE);
          }


          ImageView img2= new ImageView(this);
          //img2.setLayoutParams(lp);
          img2.setPadding(10, 10, 10, 10);
        //  img2.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, (float) 0.33));
        //  img2.setScaleType(ScaleType.FIT_XY);
          if (density == DisplayMetrics.DENSITY_HIGH) {
              img2.setLayoutParams(new TableRow.LayoutParams(125, 125 ));
          }else {
              img2.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
          }

          if (no+1 < photo_icon_u.size() ) {
              img2.setImageDrawable(photo_icon_u.get(no+1));
              img2.setId(Integer.parseInt(photoID_profile.get(no+1)));
              img2.setClickable(true);
              img2.setOnClickListener(this);
              img2.setTag("profile");

          }else {
              img2.setImageResource(R.drawable.icon);
              img2.setVisibility(View.GONE);
          }

          ImageView img3= new ImageView(this);
         // img3.setLayoutParams(lp);
          img3.setPadding(10, 10, 10, 10);
        //  img3.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, (float) 0.34));
          //img3.setScaleType(ScaleType.FIT_XY);

          if (density == DisplayMetrics.DENSITY_HIGH) {
              img3.setLayoutParams(new TableRow.LayoutParams(125, 125 ));
          }else {
              img3.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
          }

          if ( no+2 <  photo_icon_u.size()) {
              img3.setImageDrawable(photo_icon_u.get(no+2));
              img3.setId(Integer.parseInt(photoID_profile.get(no+2)));
              img3.setClickable(true);
              img3.setOnClickListener(this);
              img3.setTag("profile");
          }else {
              img3.setImageResource(R.drawable.icon);
              img3.setVisibility(View.GONE);
          }

          tr_u.addView(img1);
          tr_u.addView(img2);
          tr_u.addView(img3);
        //.  tb_photo_u.addView(tr_u);
          tb_photo_u.addView(tr_u, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        }

Ответ 2

У вас не может быть GridView в ScrollbarView. Так что вы не хотите. Вы можете иметь два вида сетки для совместного использования пространства экрана.

<LinearLayout android:layout_height="fill_parent"
    .... >
    <GridView android:layout_weight="1"
     ....... >
    <GridView android:layout_weight="1"
     ....... >
</LinearLayout>

Update

Здесь приведен пример загрузки aynctask здесь. В onProgressUpdate установите загруженное изображение в его представление.

 protected void onProgressUpdate(Integer... progress) {
     setImageToView(bitmapImg, progress[0]); // progress[0] is the index or id.
 }

Обновление 2

Вы должны сделать это с трудом. Расширьте класс AdapterView и измерьте и разместите элементы самостоятельно. Вот ссылка для начала. Теперь макет будет выглядеть как

<ScrollView ....>
    <LinearLayout android:layout_height="fill_parent"
        .... >
        <MyGridView android:layout_height="wrap_content"
         ....... >
        <MyGridView android:layout_height="wrap_content"
         ....... >
    </LinearLayout>
</ScrollView>

Ответ 3

Вы не можете поместить GridView внутри ScrollView, потому что в режиме прокрутки будут использоваться все Vertical TouchEvents. Мне тоже пришлось решить эту проблему, я решил реализовать AdapterView самостоятельно, чтобы эмулировать gridView behevior без расширения ScrollView.

Я сделал это с horizontal LinearLayout внутри a vertical LinearLayout и динамического поля между элементами.

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

Ответ 4

Если у вас есть другие элементы с GridView, я рекомендую использовать FrameLayout с layout_weight.

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

1st
</FrameLayout>
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:layout_marginTop="20dp">
2nd
</FrameLayout>
</LinearLayout>