我在一个底部有描述元数据的视图中工作。当代码端出现案例时,尝试在内部显示额外的标题文本视图,因此可以显示或不显示此文本视图。但是,如果我这样做,我的线性布局(蓝色)中的高度将会增加,这实际上是我想要避免的。
如何在字幕文本视图出现之前保持线性布局的高度,因为所有高度都是WRAP_CONTENT?
这就是我的布局到目前为止的样子:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/pp_white"
android:orientation="vertical"
android:padding="@dimen/margin_normal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Desc 1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="desc 2"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Desc 3"/>
<TextView
android:id="@+id/extra_caption"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Extra Caption"
android:visibility="gone"/>
</LinearLayout>
我知道Scroll视图肯定是必需的,但是当额外的标题(文本视图)具有VISIBLE的可见性时我想使用滚动视图,否则我不想使用滚动视图。< / p>
到目前为止,我试图做到这一点没有成功:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/pp_white"
android:orientation="vertical"
android:padding="@dimen/margin_normal">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Desc 1"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="desc 2"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Desc 3"/>
<TextView
android:id="@+id/extra_caption"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Extra Caption"
android:visibility="gone"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
换句话说,我试图这样做:
答案 0 :(得分:0)
走这条路,它奏效了! 关键是将一个Id设置为ScrollView,这样我就可以通过编程方式修改高度:
<?xml version="1.0" encoding="utf-8"?>
...
<ScrollView
android:id="@+id/my_scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
...
</LinearLayout>
获取布局参数:
private void displayExtraCaption() {
extraCaptionTextView.setVisibility(View.GONE);
int scrollHeightBeforeCaption = myScrollView.getHeight();
...
}
这是另一个挑战,因为我在一个Lib内部实现了这个,所以我无法访问这些活动(Lib只有片段),所以我第一次#&# 39; m调用此方法scrollHeightBeforeCaption等于0,以避免在发生这种情况时设置Runnable:
private void displayExtraCaption() {
extraCaptionTextView.setVisibility(View.GONE);
int scrollHeightBeforeCaption = myScrollView.getHeight();
if (scrollHeightBeforeCaption == 0) {
myScrollView
.post(new Runnable() {
@Override
public void run() {
refreshMetaDataScrollViewHeight();
}
}
);
} else {
refreshMetaDataScrollViewHeight();
}
}
最后,我的refreshMetaDataScrollViewHeight()是在我的额外标题标签变为VISIBLE时将原始高度保留在ScrollView中的那个:
private void refreshMetaDataScrollViewHeight() {
int scrollHeightBeforeCaption = metadataScrollView.getHeight();
ViewGroup.LayoutParams myScrollViewParams = myScrollView.getLayoutParams();
myScrollViewParams.height = scrollHeightBeforeCaption;
myScrollView.setLayoutParams(myScrollViewParams);
myScrollView.invalidate();
extraCaptionTextView.setVisibility(View.VISIBLE);
extraCaptionTextView.invalidate();
}
感谢您抽出时间阅读本文:)