我有一个像这样的Android布局:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_layout"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_weighing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/cv_price_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- another view elements here -->
</android.support.v7.widget.CardView>
</LinearLayout>
基本上,我希望第一个元素填充父元素和第二个元素之间的剩余空间。它工作得很好,直到我在运行时更改第二个元素的Y位置。我尝试在父元素和第一个元素上调用
.invalidate()
和.requestLayout()
,但似乎不像预期那样工作。我还尝试使用
<RelativeLayout>
更改父布局,并在第一个元素上设置android:layout_above="@+id/cv_price_holder"
,但也没有起作用。编辑:这是调用以切换布局的方法:
public void togglePriceHolder(){
float newY = mPriceHolderToggleState ? -mPriceHolderToggleLimitY : mPriceHolderToggleLimitY;
int newIcon = mPriceHolderToggleState ? R.drawable.ic_keyboard_arrow_down_white_36dp : R.drawable.ic_keyboard_arrow_up_white_36dp;
mBtnTogglePriceHolder.setImageResource(newIcon);
mCvPriceHolder.animate().translationYBy(newY).setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {
// refresh the layout
rvWeighing.forceLayout();
mMainLayout.requestLayout();
}
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
});
mPriceHolderToggleState = !mPriceHolderToggleState;
}
问题是如何刷新布局,以便第一个元素在第二个元素的Y位置发生变化时可以调整其高度?谢谢。