Android全屏布局,下方有其他布局,可滚动

时间:2014-01-26 11:26:06

标签: android xml layout scrollview

我有一个显示一些图像和文字的布局,底部有按钮。

按下按钮时,我需要在按钮下面显示一些新信息。

因此,初始内容需要保持在相同的高度(设备屏幕的高度),并且需要在其下方添加新内容,允许用户向下滚动。

当按下按钮时,理想情况下需要像页面锚点一样显示新内容,但是我遇到困难的部分是初始内容要完全筛选,并且在添加新内容时保持该大小。使整个事物可以滚动。

我一直在玩不同的布局,不同的身高参数,android:fillViewport =“true”与否等等。

如有必要,我可以提供一些XML /进一步说明。但我不确定我的目标是否可行。至少我想获得一个可滚动的整体视图,顶部布局为全屏,下方有一些布局,用户可以滚动到这些布局。

图片:

enter image description here

2 个答案:

答案 0 :(得分:1)

试试这个:

  1. 制作ScrollView容器并将布局#1添加到其中

  2. 根据每个屏幕高度将布局#1的高度设置为代码

  3. 按钮后单击将布局#2添加到ScrollView

  4. 更新: 好的,我可以建议你只有这个解决方案(它在模拟器中适用于我)。 XML:

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/scroll" 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
    
        <LinearLayout
            android:id="@+id/container" 
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <RelativeLayout 
                android:id="@+id/layout1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#ff0000">
    
                <Button 
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Button"
                    android:onClick="btnClick"/>
    
            </RelativeLayout>
    
        </LinearLayout>
    
    </ScrollView>
    

    代码:

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void btnClick(View v){
            LinearLayout container = (LinearLayout)findViewById(R.id.container);
            ScrollView scroll = (ScrollView)findViewById(R.id.scroll);
            RelativeLayout layout1 = (RelativeLayout)findViewById(R.id.layout1);
    
            RelativeLayout layout2 = new RelativeLayout(this);
            LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, 300);
            layout2.setBackgroundColor(Color.YELLOW);
    
            layout1.getLayoutParams().height = scroll.getHeight();
            scroll.setFillViewport(false);
            container.addView(layout2, params);
        }
    
    }
    

答案 1 :(得分:0)

我会创建一个自定义ScrollView,它将第一个孩子的高度设置为自己的高度。这将模拟全屏视图,同时仍然可以在其下方添加内容。

要正确处理屏幕尺寸更改,最好是覆盖onSizeChanged()

public class CustomScrollView extends ScrollView {

    // ...

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        View view = getChildAt(0);
        if (view != null)
            view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, h)));
    }
}