0
我的問題如下。在我的應用程序中,我有一個驗證碼查詢來驗證用戶。在DialogFragment
和中,假設初始化驗證碼爲空,則在接收到驗證碼後,代碼會動態設置圖像。調整孩子動態變化後的LinearLayout高度ImageView
問題是,當ImageView
空LinearLayout
高度計算的,所以以後我將它設置,圖像都推到對話窗口的可視區域(因爲LinearLayout中高度不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
後,我設置的驗證碼圖像,使其將採取在考慮新的高度值?
編輯:
我忘了提,我試圖以重新描繪它打電話invalidate
在LinearLayout中。
編輯2:這裏
按照要求,是我DialogFragment
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();
}
的一部分,這裏是視圖的創建方式:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_captcha, container);
getDialog().setTitle("Catpcha verification");
activity = (LoginActivity) getActivity();
image = (ImageView) view.findViewById(R.id.captcha_image);
linear = (LinearLayout) view.findViewById(R.id.captcha_linear);
captcha_input = (EditText) view.findViewById(R.id.captcha_input);
/* ... button callback events skipped ... */
return view;
}
你有沒有打過電話在您的ImageView requestLayout()或LinearLayour獲得驗證碼後? – Kistamushken
感謝@Kistamushken快速反饋。是的,我也嘗試改變invalidate和requestLayout()的順序。我只在LinearLayout對象上調用它們,我是否也應該在ImageView上嘗試它? – Marek
我只是試圖在兩個對象上調用requestLayout()(沒有調用invalidate),它沒有做任何改變。 – Marek