我的问题如下。在我的应用程序中,我有一个验证码查询来验证用户。在DialogFragment
中,假设最初保持验证码的ImageView
为空,则在接收验证码后,会在代码中动态设置图像。
问题是当LinearLayout
为空时计算ImageView
高度,所以在我设置之后,图像将所有内容向下推到对话框窗口的不可见区域(因为LinearLayout高度不是{{1 }})。
我很确定这是原因,因为我试图将图像高度设置为固定值,效果如下。
这是我的布局。
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();
}
答案 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>
修复后看起来像是: