ScrollView中的LinearLayout:使最后一个子项具有minHeight并在必要时填充空白空间

时间:2016-12-21 05:25:18

标签: android scrollview android-linearlayout relativelayout android-mapview

目前我有一个LinearLayout和其他一些视图作为孩子。几乎所有人都使用wrap_content的高度,而主LinearLayout也使用wrap_content。但是,主LinearLayout中的最后一个子项是使用match_parent的RelativeLayout。它包含MapView和几个按钮。

enter image description here

我想在最后一个孩子面前增加一些孩子。通过这样做,我添加的孩子越多,地图可以占用的空间越来越小。这可以到目前为止,地图根本不可见,因为其他孩子,即使wrap_content,也占据了整个空间。

我的想法或者是将主LinearLayout放在ScrollView内。然后我可以拥有无​​限的孩子​​。

我的问题是:如何让我的RelativeLayout占据屏幕的其余部分或者至少200dp的高度,以便即使没有足够的可以确保它是可见的屏幕上的空格首先显示它?

enter image description here

我的布局可能/看起来像这样:

<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">

        <LinearLayout android:layout_height="wrap_content" ... >

        <LinearLayout android:layout_height="wrap_content" ... >

        <LinearLayout android:layout_height="wrap_content" ... >

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

            <com.google.android.gms.maps.MapView
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

            <Button ... />
            <Button ... />
            <Button ... />
        </RelativeLayout>
    </LinearLayout>
</ScrollView>

2 个答案:

答案 0 :(得分:3)

使用它,你必须使用dp和重量两者,你应该使用重量,因为 当你的孩子少,你希望你的RealtiveLayout覆盖空的空间, 和dp当你的孩子很多,那么你也想保持RelativeLayout的大小

 var  mydateNew='2016,3,3'+ 'GMT';
 var utcDateNew = Date.parse(mydateNew);
 console.log("the right time that you want:"+utcDateNew)

答案 1 :(得分:0)

尝试以下代码,它会对您有所帮助。

private void restoreSelectedPositions(){
    SharedPreferences preferences = getSharedPreferences("selected_pos", MODE_PRIVATE);
    int tmpTotal = preferences.getInt("total_pos", 0);
    if(tmpTotal == numbers.size()){
        for(int i=0; i<tmpTotal; i++{
            boolean tmpFlag = preferences.getBoolean("pos" + i, false);
            numbers.get(i).setSelected(tmpFlag);
        }
    }else{
        // Saved data size not match with existing data.
    }
}

private void saveSelectedPositions(){
    SharedPreferences preferences = getSharedPreferences("selected_pos", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.clear();
    editor.putInt("total_pos", numbers.size());
    for(int i=0; i<numbers.size(); i++){
        editor.putBoolean("pos" + i, numbers.get(i).isSelected());
    }
    editor.commit();
}