0

我想创建一个像这个图像的设计。

我想要左右独立滚动

我所做的是我创建了一个主布局。因为我在运行时膨胀了内部设计。所以现在设计是正确的。但我犯了一些愚蠢的错误。因为滚动进入布局内部.所以请查看代码并帮助我我是android新手

班级

void setData(){
        flightResult=(LinearLayout)findViewById(R.id.flightResultData);
        LinearLayout.LayoutParams flightDetailsLayout = new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
         LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

         LinearLayout.LayoutParams forUnderLine = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 
                 LayoutParams.WRAP_CONTENT);
         forUnderLine.setMargins(0,0, 0, 0);

         flightDetailsLayout.setMargins(0, 40, 0, 0);
            for(int i=0;i < 13;i++){
                TextView line=new TextView(this);
                 line.setBackgroundResource(R.layout.shape_line);
                 line.setLayoutParams(forUnderLine);
                 if(i!=0){
                     flightResult.addView(line);  
                 }
                  LinearLayout flightInformations=(LinearLayout)inflater.inflate(R.layout.flight_details_layout, null);
                  flightLogo=(ImageView)flightInformations.findViewById(R.id.onewayflightLogo);
                  flightCompany = (TextView)flightInformations.findViewById(R.id.onewayflightName);
                  flightLogo.setImageResource(R.drawable.airindia);
                  flightCompany.setText("AirIndia");

              flightResult.addView(flightInformations);
            }
            TextView dummy=new TextView(this);
            dummy.setLayoutParams(flightDetailsLayout);
            flightResult.addView(dummy);
    }

主布局(我对 flightResultData 感到不满)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/mainLinearLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="@drawable/top_bg"
        android:orientation="horizontal" >
        <ImageView 
            android:id="@+id/back_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/back_btn"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="10dp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:layout_marginLeft="75dp"
            android:text="@string/flightHeader"
            android:textColor="@android:color/white" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/flightDetailsLayout"
        android:layout_width="fill_parent"
        android:layout_height="70dp"
        android:layout_below="@+id/mainLinearLayout"
        android:layout_centerHorizontal="true"
        android:background="@drawable/gray_bg123"
        android:orientation="vertical" >
        <LinearLayout
            android:id="@+id/innerflightDetailsLayout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/from"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="12dp"
                android:paddingLeft="12dp"
                android:textSize="12sp"
                android:text="Boston to San Fransisco, "
                android:textStyle="bold" />

            <TextView
                android:id="@+id/tripType"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="12dp"
                android:text="RoundTrip"
                android:textSize="12sp" />

        </LinearLayout>
        <LinearLayout
            android:id="@+id/innerTripLayout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tripDate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="12dp"
                android:textSize="10sp"
                android:text="19 Jan 2013 " 
                android:textStyle="bold"/>
            <TextView
                android:id="@+id/paxText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="for 1 Adults,0 Childs,O Infants"
                android:textSize="12dp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/Book"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginTop="5dp"
            android:orientation="horizontal" >

            <TextView
                android:id="@+id/tripDate"
                android:layout_width="84dp"
                android:layout_height="wrap_content"
                android:paddingLeft="12dp"
                android:text="Rs 10,2345 "
                android:textSize="10sp"
                android:layout_weight="1"
                android:textStyle="bold" />

            <ImageView
                android:id="@+id/bookBtn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="left"
                android:src="@drawable/book" />

        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/sortFlightLayouts"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/flightDetailsLayout"
        android:background="@drawable/gray_bg123"
        android:orientation="horizontal" >

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

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="DEL-BLR"
                android:layout_marginLeft="6dp"
                android:layout_marginTop="5dp"
                android:textStyle="bold" />

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"

                android:orientation="horizontal" >

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:src="@drawable/flight_icon_result" />

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginLeft="25dp"
                    android:src="@drawable/time" />

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginLeft="5dp"
                    android:src="@drawable/rupee" />
            </LinearLayout>
        </LinearLayout>
        <View
            android:layout_width="1dp"
            android:layout_height="60dp"
            android:background="@android:color/darker_gray" />
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/gray_bg123"
            android:orientation="vertical" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="BLR-DEL"
                android:layout_marginLeft="6dp"
                android:layout_marginTop="5dp"
                android:textStyle="bold" />

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:src="@drawable/flight_icon_result" />

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginLeft="25dp"
                    android:src="@drawable/time" />

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_marginLeft="5dp"
                    android:src="@drawable/rupee" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
            android:id="@+id/flightResultData"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/sortFlightLayouts"
            android:layout_marginLeft="8dp"
            android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/footerLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal"
        android:background="@drawable/top_bg" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_marginTop="5dp"
            android:src="@drawable/filter" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_marginTop="5dp"
            android:src="@drawable/sort" />
    </LinearLayout>
</RelativeLayout>

details_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainResultLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ScrollView
            android:id="@+id/returnScrollView"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1" >

            <LinearLayout
                android:id="@+id/oneWayResultData"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="horizontal" >

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

                    <ImageView
                        android:id="@+id/onewayflightLogo"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="3dp"
                        android:src="@drawable/spicejet" />

                    <TextView
                        android:id="@+id/onewayflightName"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="SpiceJet" />

                    <TextView
                        android:id="@+id/onewayflightNumber"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="9W - 496" />
                </LinearLayout>

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

                    <TextView
                        android:id="@+id/onewayflightTime"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:layout_marginTop="6dp"
                        android:minLines="1"
                        android:text="06:00 - 7:05"
                        android:textSize="12dp" />

                    <TextView
                        android:id="@+id/onewayflightDuration"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:minLines="1"
                        android:text="1h 35m | Non Stop"
                        android:textSize="10dp" />

                    <TextView
                        android:id="@+id/onewayflightAmount"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:minLines="1"
                        android:text="Rs 20,0000"
                        android:textSize="12dp" />
                </LinearLayout>
            </LinearLayout>
        </ScrollView>

        <View
            android:layout_width="1dp"
            android:layout_height="60dp"
            android:background="@android:color/darker_gray" />

        <ScrollView
            android:id="@+id/returnScrollView"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1" >

            <LinearLayout
                android:id="@+id/returnResultData"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:orientation="horizontal" >

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

                    <ImageView
                        android:id="@+id/returnflightLogo"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="3dp"
                        android:src="@drawable/spicejet" />

                    <TextView
                        android:id="@+id/returnflightName"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="3dp"
                        android:text="Spice jet" />

                    <TextView
                        android:id="@+id/returnflightNumber"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="3dp"
                        android:text="8W - 356" />
                </LinearLayout>

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

                    <TextView
                        android:id="@+id/returnflightTime"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:layout_marginTop="6dp"
                        android:minLines="1"
                        android:text="06:00 - 7:05"
                        android:textSize="12sp" />

                    <TextView
                        android:id="@+id/returnflightDuration"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:minLines="1"
                        android:text="1h 35m | Non Stop"
                        android:textSize="10sp" />

                    <TextView
                        android:id="@+id/returnflightAmount"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:minLines="1"
                        android:text="Rs 20,0000"
                        android:textSize="12sp" />
                </LinearLayout>
            </LinearLayout>
        </ScrollView>
    </LinearLayout>

</LinearLayout>
4

1 回答 1

1

我查看了布局 XML 并发现了您的问题。在一种布局中,您尝试同时定义滚动视图及其内容。你不想这样做。我还建议您不要滚动视图,而是列表视图。

查看教程,了解如何使用自定义内容创建列表视图并创建一个 arrayadapter 来填充数据。

这是您的主要布局的外观示例:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <LinearLayout
            android:id="@+id/llHeader"
            android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1"/>

    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="4"
        android:orientation="horizontal">

        <ListView
                android:id="@+id/lvDepartures"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"/>
        <ListView
                android:id="@+id/lvArrivals"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"/>

    </LinearLayout>

    <LinearLayout
            android:id="@+id/llFooter"
            android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1"/>

</LinearLayout>

这为您提供了三个动态加权的垂直部分,因此它在任何设备屏幕上以 1:4:1 的比例看起来都相同。然后中间部分用两个可以独立滚动的列表视图从中间分开,您可以使用适配器填充它们。

然后你想为“一个航班”创建一个单一的布局

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

    <ImageView
            android:layout_width="75sp"
            android:layout_height="75sp"
            android:layout_marginRight="10sp"
            android:layout_marginTop="5sp"
            android:layout_marginBottom="5sp"
            android:id="@+id/ivDemoIcon"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:text="Demo Name"
            android:layout_marginTop="20sp"
            android:id="@+id/tvDemoName"
            android:layout_toRightOf="@+id/ivDemoIcon"
            android:layout_toLeftOf="@+id/ivChevron"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/ivDemoIcon"
            android:layout_toLeftOf="@+id/ivChevron"
            android:text="Date Version"
            android:id="@+id/tvDateVersion"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:layout_below="@+id/tvDemoName"/>

    <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/ivChevron"
            android:layout_alignTop="@+id/ivDemoIcon"
            android:layout_alignParentRight="true"
            android:layout_alignBottom="@+id/ivDemoIcon"/>
</RelativeLayout>

这种布局有两个图标的空间,以及布局良好的三个文本部分。您可以使用所需的信息移动这些并根据需要创建布局。始终尝试使布局尽可能通用,以便您可以一遍又一遍地使用它。

然后,您可以使用适配器为每个航班的每个列表视图的每个元素填充此“航班”布局的实例(我懒得将其调整为像您一样的航班布局,但您应该了解要点)。

然后,您可以创建一个页眉和页脚布局,可以在运行时根据您拥有的航班信息设置 textviews 和 imageviews 等。对于航班信息,我强烈建议使用可从任何地方访问的单例数据类并将信息存储在 ArrayLists 中(Listview 适配器等与 ArrayLists 配合得非常好,您可以执行各种很酷的事情,例如排序和过滤)

聪明编码的美妙之处在于让一切都尽可能动态和可重用。不要对事物进行硬编码或为同一事物创建大量布局,重用和回收!会让你的工作轻松很多。希望这有帮助

于 2013-08-06T10:56:43.217 回答