如果项目数小于屏幕高度,则Android LinearLayout无法正确显示

时间:2015-04-18 09:14:32

标签: android android-linearlayout android-scrollview

我有一个片段,它从rest api中获取项目,并在scrollview中的LinearLayout中显示项目标题。

以下是我的观点和代码。

fragment_cards_view.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/scrollView"
            android:fillViewport="true">

        <LinearLayout
            android:id="@+id/linear_card_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:background="@color/wallet_holo_blue_light"/>

</ScrollView>

list_item.xml

RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@color/white"
                    android:layout_marginBottom="10dp">
    <TextView
        android:id="@+id/list_titleTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title"
        style="@style/item_header"/>

   </RelativeLayout>
</RelativeLayout>

TitleFragment.java

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.i(TAG, "In onCreateView");

        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_cards_view, container, false);

        mLinearLayout = (LinearLayout)v.findViewById(R.id.linear_card_view);

        return v;
    }

private void createUpcomingView() {  
            int counter = 0;
            for (User user : mUsers) {
                LayoutInflater inflater = null;
                inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View mLinearView = inflater.inflate(R.layout.list_item, null);
                mLinearView.setId(user.getId());

                TextView titleTextView = (TextView)mLinearView.findViewById(R.id.list_titleTextView);
                titleTextView.setText("title " + counter);
                mLinearLayout.addView(mLinearView);
                counter++;
            }
        }

我遇到的问题是,如果项目数小于屏幕高度,则显示变得不正确。

此屏幕截图有4个项目,但它只显示第一个项目,并且边距未正确对齐。 enter image description here

此屏幕截图包含许多项目,边距正确对齐。 enter image description here

此屏幕截图是第一个解决方案: enter image description here

3 个答案:

答案 0 :(得分:1)

从list_item.xml中删除以下布局,然后它将正常工作。

<RelativeLayout android:layout_width="match_parent"
                            android:layout_height="match_parent"
                            android:background="@color/white"
                            android:layout_marginBottom="10dp">

</RelativeLayout>

答案 1 :(得分:0)

尝试写作

inflater.inflate(R.layout.list_item, mLinearLayout, false);

而不是

inflater.inflate(R.layout.list_item, null);

另外,在list_item.xml中使用wrap_content高度

答案 2 :(得分:0)

我根据@ clemp6r和@Jain Nidhi的答案找到了解决方案。

fragment_cards_view.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/scrollView"
            android:fillViewport="true">

        <LinearLayout
            android:id="@+id/linear_card_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:background="@color/wallet_holo_blue_light"/>

</ScrollView>

list_item.xml,添加左右边距,删除嵌套的RelativeLayout,将所有layout_height设置为wrap_content

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp">

    <TextView
        android:id="@+id/list_titleTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Title"
        style="@style/item_header"/>

</RelativeLayout>

TitleFragment.java,修改了膨胀的第二和第三个参数。

private void createUpcomingView(..) {
View mLinearView = inflater.inflate(R.layout.list_item, mLinearLayout, false);
}