我有一个显示一些图像和文字的布局,底部有按钮。
按下按钮时,我需要在按钮下面显示一些新信息。
因此,初始内容需要保持在相同的高度(设备屏幕的高度),并且需要在其下方添加新内容,允许用户向下滚动。
当按下按钮时,理想情况下需要像页面锚点一样显示新内容,但是我遇到困难的部分是初始内容要完全筛选,并且在添加新内容时保持该大小。使整个事物可以滚动。
我一直在玩不同的布局,不同的身高参数,android:fillViewport =“true”与否等等。
如有必要,我可以提供一些XML /进一步说明。但我不确定我的目标是否可行。至少我想获得一个可滚动的整体视图,顶部布局为全屏,下方有一些布局,用户可以滚动到这些布局。
图片:
答案 0 :(得分:1)
试试这个:
制作ScrollView容器并将布局#1添加到其中
根据每个屏幕高度将布局#1的高度设置为代码
按钮后单击将布局#2添加到ScrollView
更新: 好的,我可以建议你只有这个解决方案(它在模拟器中适用于我)。 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)));
}
}