如何通过编程使GridView android中的子视图高度相等
我正在片段中显示一个GridView。我已经声明了一个GridView thr xml。我正在将值传递给GridView到Baseadapter。在适配器类中,我正在添加customView(xml文件) 基于动态值,我删除了gridView的一些子视图中的一些图像元素。当存在图像时,子视图的高度与不包含图像的子视图不同 我希望在gridView的所有子级上获得统一的高度。没有直接的API来设置gridView的高度 我不知道是否可以通过xml声明或通过gridView的属性以编程方式设置高度 因此,我试图以编程方式获取gridview的元素如何通过编程使GridView android中的子视图高度相等,android,android-gridview,baseadapter,Android,Android Gridview,Baseadapter,我正在片段中显示一个GridView。我已经声明了一个GridView thr xml。我正在将值传递给GridView到Baseadapter。在适配器类中,我正在添加customView(xml文件) 基于动态值,我删除了gridView的一些子视图中的一些图像元素。当存在图像时,子视图的高度与不包含图像的子视图不同 我希望在gridView的所有子级上获得统一的高度。没有直接的API来设置gridView的高度 我不知道是否可以通过xml声明或通过gridView的属性以编程方式设置高度
public void onActivityCreated
{
.....
.....
reorderHeight();
}
public void reordheight(){
试一试{
int size=acctgrid.getChildCount();//返回0
对于(int i=0;iBuild.VERSION\u代码.冰淇淋\u三明治\u MR1){
viewTreeObserver
.移除LoballayoutListener(此);
}否则{
viewTreeObserver
.RemoveGlobalOnlayOutliner(本文件);
}
Log.v(“最大高度>>>>>为>>>”,“
+最大高度);
Log.v(“视图高度>>>>>>>>>>为>>>>>”,
“”+view.getHeight());
maxHeight=Math.max(maxHeight,
view.getHeight());
Log.v(“最大高度>>>>>为>>>”,“
+最大高度);
}
});
}
view.setLayoutParams(新的LayoutParams(view.getWidth()),
最大高度);
}
}捕获(例外e){
//TODO自动生成的捕捉块
Log.v(“识别大小时出现异常>>>”,
“#####”+e.getMessage());
}
}
请告诉我如何以编程方式检索gridView的高度,以便我可以将其设置为相等。这是手动设置gridView高度的简单而肮脏的方法。 将child_height声明为全局变量 int child_height=0
public class UsersAdapter extends ArrayAdapter<User> {
public UsersAdapter(Context context, ArrayList<User> users) {
super(context, 0, users);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
User user = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false);
}
TextView tvName = (TextView) convertView.findViewById(R.id.tvName);
TextView tvHome = (TextView) convertView.findViewById(R.id.tvHome);
tvName.setText(user.name);
tvHome.setText(user.hometown);
child_height = convertView.getMeasuredHeight();
return convertView;
}
}
public类UsersAdapter扩展了ArrayAdapter{
公共用户适配器(上下文,ArrayList用户){
超级(上下文,0,用户);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
用户=获取项目(位置);
if(convertView==null){
convertView=LayoutInflater.from(getContext()).flate(R.layout.item_user,parent,false);
}
TextView-tvName=(TextView)convertView.findViewById(R.id.tvName);
TextView tvHome=(TextView)convertView.findViewById(R.id.tvHome);
tvName.setText(user.name);
tvHome.setText(用户.家乡);
child_height=convertView.getMeasuredHeight();
返回视图;
}
}
因此,您需要手动计算GridView的行数,并与之相乘,然后将该值设置为GridView高度。让我检查一下,没有直接的API来设置GridView的高度或GridView的子级,任何示例代码都会很有用。
public class UsersAdapter extends ArrayAdapter<User> {
public UsersAdapter(Context context, ArrayList<User> users) {
super(context, 0, users);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
User user = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_user, parent, false);
}
TextView tvName = (TextView) convertView.findViewById(R.id.tvName);
TextView tvHome = (TextView) convertView.findViewById(R.id.tvHome);
tvName.setText(user.name);
tvHome.setText(user.hometown);
child_height = convertView.getMeasuredHeight();
return convertView;
}
}