代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Teoh

线性布局在ScrollView中不展开

  •  0
  • Jeffrey Teoh  · 技术社区  · 7 年前

    我想用卡片视图项目做一个可滚动的网格布局。

    我在网上尝试了很多解决方案,但似乎没有达到我想要的结果。
    经过调查,我发现这与整个项目有关。
    创建了新活动后,我在xml文件中尝试了 可以在其他项目中使用的相同代码在我当前的项目中不起作用。

    下面是我使用的xml代码和java代码,
    fragment\u主页。xml

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/fragment_home"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.example.android.chatapps_android.tabviewChatbox">
    
        <LinearLayout
            android:weightSum="10"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        <GridLayout
            android:id="@+id/mainGrid"
            android:layout_weight="10"
            android:columnCount="2"
            android:rowCount="3"
            android:alignmentMode="alignMargins"
            android:columnOrderPreserved="false"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:padding="14dp">
    
            <!-- Row 1 -->
    
            <!-- Column 1 -->
            <android.support.v7.widget.CardView
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_columnWeight="1"
                android:layout_rowWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                app:cardElevation="8dp"
                app:cardCornerRadius="8dp">
    
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_margin="16dp"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
    
                    <ImageView
                        android:id="@+id/ivBasicImage"
                        android:layout_gravity="center_horizontal"
                        android:layout_width="70sp"
                        android:layout_height="70sp" />
    
                    <TextView
                        android:text="Noah"
                        android:layout_gravity="center_horizontal"
                        android:textColor="@android:color/black"
                        android:textSize="18dp"
                        android:layout_height="wrap_content"
                        android:layout_width="wrap_content"
                        />
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Column 2 -->
            <android.support.v7.widget.CardView
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_columnWeight="1"
                android:layout_rowWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                app:cardElevation="8dp"
                app:cardCornerRadius="8dp">
    
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_margin="16dp"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
    
                    <ImageView
                        android:id="@+id/ivBasicImage2"
                        android:layout_gravity="center_horizontal"
                        android:layout_width="70sp"
                        android:layout_height="70sp" />
    
                    <TextView
                        android:text="Adam"
                        android:layout_gravity="center_horizontal"
                        android:textColor="@android:color/black"
                        android:textSize="18dp"
                        android:layout_height="wrap_content"
                        android:layout_width="wrap_content"
                        />
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Row 2 -->
    
            <!-- Column 1 -->
            <android.support.v7.widget.CardView
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_columnWeight="1"
                android:layout_rowWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                app:cardElevation="8dp"
                app:cardCornerRadius="8dp">
    
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_margin="16dp"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
    
                    <ImageView
                        android:id="@+id/ivBasicImage3"
                        android:layout_gravity="center_horizontal"
                        android:layout_width="70sp"
                        android:layout_height="70sp" />
    
                    <TextView
                        android:text="Warlock"
                        android:layout_gravity="center_horizontal"
                        android:textColor="@android:color/black"
                        android:textSize="18dp"
                        android:layout_height="wrap_content"
                        android:layout_width="wrap_content"
                        />
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Column 2 -->
            <android.support.v7.widget.CardView
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_columnWeight="1"
                android:layout_rowWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                app:cardElevation="8dp"
                app:cardCornerRadius="8dp">
    
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_margin="16dp"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
    
                    <ImageView
                        android:id="@+id/ivBasicImage4"
                        android:layout_gravity="center_horizontal"
                        android:layout_width="70sp"
                        android:layout_height="70sp" />
    
                    <TextView
                        android:text="Amy"
                        android:layout_gravity="center_horizontal"
                        android:textColor="@android:color/black"
                        android:textSize="18dp"
                        android:layout_height="wrap_content"
                        android:layout_width="wrap_content"
                        />
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Row 3 -->
    
            <!-- Column 1 -->
            <android.support.v7.widget.CardView
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_columnWeight="1"
                android:layout_rowWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                app:cardElevation="8dp"
                app:cardCornerRadius="8dp">
    
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_margin="16dp"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
    
                    <ImageView
                        android:id="@+id/ivBasicImage5"
                        android:layout_gravity="center_horizontal"
                        android:layout_width="70sp"
                        android:layout_height="70sp" />
    
                    <TextView
                        android:text="Felicia"
                        android:layout_gravity="center_horizontal"
                        android:textColor="@android:color/black"
                        android:textSize="18dp"
                        android:layout_height="wrap_content"
                        android:layout_width="wrap_content"
                        />
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Column 2 -->
            <android.support.v7.widget.CardView
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_columnWeight="1"
                android:layout_rowWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                app:cardElevation="8dp"
                app:cardCornerRadius="8dp">
    
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_margin="16dp"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
    
                    <ImageView
                        android:id="@+id/ivBasicImage6"
                        android:layout_gravity="center_horizontal"
                        android:layout_width="70sp"
                        android:layout_height="70sp" />
    
                    <TextView
                        android:text="John"
                        android:layout_gravity="center_horizontal"
                        android:textColor="@android:color/black"
                        android:textSize="18dp"
                        android:layout_height="wrap_content"
                        android:layout_width="wrap_content"
                        />
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
        </GridLayout>
        </LinearLayout>
    </ScrollView>
    


    下面是此片段活动的java代码

    public class HomeFragment extends Fragment {
    
    GridLayout mainGrid;
    ImageView ivBasicImage, ivBasicImage2, ivBasicImage3, ivBasicImage4, ivBasicImage5, ivBasicImage6;
    
    public HomeFragment() {
        // Required empty public constructor
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_home, container, false);
        // Inflate the layout for this fragment
    
        mainGrid = (GridLayout) v.findViewById(R.id.mainGrid);
    
        //set Event
        setSingleEvent (mainGrid);
    
        final SwipeRefreshLayout mSwipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.fragment_home);
    
        mSwipeRefreshLayout.setOnRefreshListener(
                new SwipeRefreshLayout.OnRefreshListener() {
                    @Override
                    public void onRefresh() {
                        ((tabviewChatbox) getActivity()).refreshNow();
                        Toast.makeText(getContext(), "Refreshed", Toast.LENGTH_LONG).show();
                    }
                }
        );
    
        return v;
    }
    
    private void setSingleEvent(GridLayout mainGrid) {
        String imageURL = "https://i.imgur.com/ql2DkPW.jpg";
        ivBasicImage = (ImageView) mainGrid.findViewById(R.id.ivBasicImage);
        Picasso.with(getContext()).load(imageURL).transform(new CircleTransform()).into(ivBasicImage);
        ivBasicImage2 = (ImageView) mainGrid.findViewById(R.id.ivBasicImage2);
        Picasso.with(getContext()).load(imageURL).transform(new CircleTransform()).into(ivBasicImage2);
        ivBasicImage3 = (ImageView) mainGrid.findViewById(R.id.ivBasicImage3);
        Picasso.with(getContext()).load(imageURL).transform(new CircleTransform()).into(ivBasicImage3);
        ivBasicImage4 = (ImageView) mainGrid.findViewById(R.id.ivBasicImage4);
        Picasso.with(getContext()).load(imageURL).transform(new CircleTransform()).into(ivBasicImage4);
        ivBasicImage5 = (ImageView) mainGrid.findViewById(R.id.ivBasicImage5);
        Picasso.with(getContext()).load(imageURL).transform(new CircleTransform()).into(ivBasicImage5);
        ivBasicImage6 = (ImageView) mainGrid.findViewById(R.id.ivBasicImage6);
        Picasso.with(getContext()).load(imageURL).transform(new CircleTransform()).into(ivBasicImage6);
    
        //Loop all child item of Main Grid
        for(int i=0; i<mainGrid.getChildCount(); i++)
        {
            CardView cardView = (CardView) mainGrid.getChildAt(i);
    
            final int finalI = i;
            cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //Toast.makeText (getContext(), "Clicked at activity " + finalI, Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(getActivity(), ImageButtonActivity.class);
                    intent.putExtra("info", "This is activity from card item "+finalI );
                    startActivity(intent);
                }
            });
        }
    }
    


    此外,这里是Android Studio中的设计视图。

    LinearLayout视图被压缩在屏幕顶部

    enter image description here

    2 回复  |  直到 4 年前
        1
  •  2
  •   ADM    7 年前

    android:weightSum 不会在内部工作 ScrollView . 这就是使用 卷轴视图 垂直包含所有元素,即使在高度界限之外。 设置 android:fillViewport="true" 在里面 卷轴视图 让它发挥作用。这将使内容填充视口。

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/fragment_home"
    android:layout_width="match_parent"
    android:fillViewport="true"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    </ScrollView>
    

    这相当于使用 LinearLayout 那么为什么不直接删除 卷轴视图 线性布局 具有 weightSum .

        2
  •  0
  •   Chetan Kumar Patel    7 年前
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/fragment_home"
            android:fillViewport="true"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:weightSum="10">
    
        <GridLayout
            android:id="@+id/mainGrid"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="10"
            android:alignmentMode="alignMargins"
            android:columnCount="2"
            android:columnOrderPreserved="false"
            android:padding="10dp"
            android:rowCount="3">
    
            <!-- Row 1 -->
    
            <!-- Column 1 -->
            <android.support.v7.widget.CardView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_columnWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:layout_rowWeight="1"
                app:cardCornerRadius="8dp"
                app:cardElevation="8dp">
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_margin="16dp"
                    android:orientation="vertical">
    
                    <ImageView
                        android:id="@+id/ivBasicImage"
                        android:layout_width="70dp"
                        android:layout_height="70dp"
                        android:layout_gravity="center_horizontal"/>
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:text="Noah"
                        android:textColor="@android:color/black"
                        android:textSize="18sp"/>
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Column 2 -->
            <android.support.v7.widget.CardView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_columnWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:layout_rowWeight="1"
                app:cardCornerRadius="8dp"
                app:cardElevation="8dp">
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_margin="16dp"
                    android:orientation="vertical">
    
                    <ImageView
                        android:id="@+id/ivBasicImage2"
                        android:layout_width="70dp"
                        android:layout_height="70dp"
                        android:layout_gravity="center_horizontal"/>
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:text="Adam"
                        android:textColor="@android:color/black"
                        android:textSize="18sp"/>
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Row 2 -->
    
            <!-- Column 1 -->
            <android.support.v7.widget.CardView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_columnWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:layout_rowWeight="1"
                app:cardCornerRadius="8dp"
                app:cardElevation="8dp">
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_margin="16dp"
                    android:orientation="vertical">
    
                    <ImageView
                        android:id="@+id/ivBasicImage3"
                        android:layout_width="70dp"
                        android:layout_height="70dp"
                        android:layout_gravity="center_horizontal"/>
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:text="Warlock"
                        android:textColor="@android:color/black"
                        android:textSize="18sp"/>
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Column 2 -->
            <android.support.v7.widget.CardView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_columnWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:layout_rowWeight="1"
                app:cardCornerRadius="8dp"
                app:cardElevation="8dp">
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_margin="16dp"
                    android:orientation="vertical">
    
                    <ImageView
                        android:id="@+id/ivBasicImage4"
                        android:layout_width="70dp"
                        android:layout_height="70dp"
                        android:layout_gravity="center_horizontal"/>
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:text="Amy"
                        android:textColor="@android:color/black"
                        android:textSize="18sp"/>
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Row 3 -->
    
            <!-- Column 1 -->
            <android.support.v7.widget.CardView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_columnWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:layout_rowWeight="1"
                app:cardCornerRadius="8dp"
                app:cardElevation="8dp">
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_margin="16dp"
                    android:orientation="vertical">
    
                    <ImageView
                        android:id="@+id/ivBasicImage5"
                        android:layout_width="70dp"
                        android:layout_height="70dp"
                        android:layout_gravity="center_horizontal"/>
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:text="Felicia"
                        android:textColor="@android:color/black"
                        android:textSize="18sp"/>
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
            <!-- Column 2 -->
            <android.support.v7.widget.CardView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_columnWeight="1"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginRight="16dp"
                android:layout_rowWeight="1"
                app:cardCornerRadius="8dp"
                app:cardElevation="8dp">
    
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_margin="16dp"
                    android:orientation="vertical">
    
                    <ImageView
                        android:id="@+id/ivBasicImage6"
                        android:layout_width="70dp"
                        android:layout_height="70dp"
                        android:layout_gravity="center_horizontal"/>
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:text="John"
                        android:textColor="@android:color/black"
                        android:textSize="18sp"/>
                </LinearLayout>
            </android.support.v7.widget.CardView>
    
        </GridLayout>
    </LinearLayout>
    </ScrollView>
    

    试试这个。