Android 在onLayout调用时调整布局大小
我在水平滚动视图中有一个线性布局,我想根据它的内容调整填充。我正在使用水平滚动视图的onLayout调用Android 在onLayout调用时调整布局大小,android,android-linearlayout,horizontalscrollview,Android,Android Linearlayout,Horizontalscrollview,我在水平滚动视图中有一个线性布局,我想根据它的内容调整填充。我正在使用水平滚动视图的onLayout调用 @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if(null != views && views.size() > 0) {
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if(null != views && views.size() > 0) {
int paddingLeft = (getWidth()/2) - (views.get(0).getWidth()/2);
int paddingRight = (getWidth()/2) - (views.get(views.size()-1).getWidth()/2);
content.setPadding(getPaddingLeft() + paddingLeft, getPaddingTop(), getPaddingRight() + paddingRight, getPaddingBottom());
}
content.invalidate();
}
我已经记录了所有的尺寸,除了填充之外,所有的尺寸似乎都是准确的。在我再次更改视图的可见性之前,内容上的填充不可见。如您所见,我试图使内容无效,但在重新绘制之前,布局的宽度仍然没有填充。可以强制绘制吗?我通过在onLayout中获取填充值来解决这个问题,并在绘制之前设置它,希望它能帮助其他人
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
FLog.d("Information", "onLayout");
if(null != views && views.size() > 0) {
paddingLeft = (getWidth()/2) - (views.get(0).getWidth()/2);
paddingRight = (getWidth()/2) - (views.get(views.size()-1).getWidth()/2);
FLog.i("Information", "[paddingRight]" + paddingRight + " = " + " ([scrollView width]" + getWidth() + " / 2) " + " - " + "[viewLast width]" + views.get(views.size()-1).getWidth() + " / 2)");
FLog.i("Information", "ContentWidth: " + content.getWidth());
paddingInitialized = true;
}
content.invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
if(!paddingSet && paddingInitialized) {
content.setPadding(getPaddingLeft() + paddingLeft, getPaddingTop(), getPaddingRight() + paddingRight, getPaddingBottom());
paddingSet = true;
}
super.onDraw(canvas);
}