Thắc mắc về LayoutInflater trong Android
Chào mọi người, hiện tại em đang học lập trình Android. Em có vài thắc mắc khi học đến phần LayoutInflater, mong mọi người giúp đỡ ạ.
Em có một ví dụ như sau:
Trong file customlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.nguye.layoutinflater.MainActivity"
android:padding="20sp">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text"/>
</android.support.constraint.ConstraintLayout>
Trong file CustomAdapter.java
/**
Để tóm gọn thì em lượt bỏ một số method, chỉ tập trung vào LayoutInflater thôi
*/
public class customadapter extends BaseAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
convertView = layoutInflater.inflate(R.layout.customlayout.xml, parent, false);
return convertView;
}
}
Sau khi tham khảo trên Android Developer thì em hiểu đoạn code trên như sau:
- convertView (đóng vai trò như một ViewGroup?), sẽ nhận được tất cả các thuộc tính của parent là ConstrainLayout (vì attachToRoot nhận giá trị là false), và được phân cấp theo sơ đồ: convertView --> ConstrainLayout --> ImageView, TextView.
Nhưng cách hiểu trên có một vấn đề khi đổ ra dữ liệu ra ListView, đó là: mỗi convertView
có chiều cao là match_parent
thì phải chiếm hết chiều cao của Context mới đúng, nhưng khi hiển thị ra màn hình thì lại có độ cao là wrap_content
.
Nhờ mọi người giải thích giúp em ạ. Cảm ơn mọi người.
Chính xác là nó sẽ chiếm hết chiều cao context, nhưng các thành phần của nó là
wrap_content
.Mình nghĩ là bạn còn quên nhắc đến một activity nữa là
activity_main
. Trong đó có khai báo mộtListView
có kích thước làwrap_content
. Sau đó bạn cũng có một vài dòng code để đổ dữ liệu vàoListView
đó.