在动态更改子ImageView后调整LinearLayout高度

时间:2015-10-09 21:30:51

标签: android layout resize android-linearlayout android-imageview

我的问题如下。在我的应用程序中,我有一个验证码查询来验证用户。在DialogFragment中,假设最初保持验证码的ImageView为空,则在接收验证码后,会在代码中动态设置图像。

问题是当LinearLayout为空时计算ImageView高度,所以在我设置之后,图像将所有内容向下推到对话框窗口的不可见区域(因为LinearLayout高度不是{{1 }})。

image height is wrap_content

我很确定这是原因,因为我试图将图像高度设置为固定值,效果如下。

image height is 55dp

这是我的布局。

updated

在设置验证码图像后,我怎么能以某种方式重新渲染<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/captcha_linear" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/captcha_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="centerCrop"/> <EditText android:id="@+id/captcha_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="type captcha code here..." android:maxLength="14" android:maxLines="1" android:singleLine="true"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Refresh" android:id="@+id/button_captcha_refresh" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Submit" android:id="@+id/button_captcha_submit" /> </LinearLayout> ,以便考虑新的高度值?

编辑:

我忘了提到我尝试在LinearLayout中调用LinearLayout以便重新呈现它。

编辑2:

根据要求,这是我的DialogFragment

的一部分
invalidate

以下是View的创建方式:

public void refreshCaptcha(String b64captcha) {
    byte[] decodedString = Base64.decode(b64captcha, Base64.DEFAULT);
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
    image.setImageBitmap(decodedByte);
    linear.invalidate();
    linear.requestLayout();
}

1 个答案:

答案 0 :(得分:0)

我解决了。我在that博客上找到了解决方案。原来,将整个布局包装成RelativeLayout解决了这个问题,我真的不知道为什么(如果有人知道我会感激评论)。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/tools"
    android:id="@+id/rel"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <LinearLayout
        android:id="@+id/captcha_linear"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/captcha_image"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"/>
        <EditText
            android:id="@+id/captcha_input"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="type captcha code here..."
            android:maxLength="14"
            android:maxLines="1"
            android:singleLine="true"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Refresh"
            android:id="@+id/button_captcha_refresh" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Submit"
            android:id="@+id/button_captcha_submit" />
    </LinearLayout>
</RelativeLayout>

修复后看起来像是:

enter image description here