Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过编程使GridView android中的子视图高度相等_Android_Android Gridview_Baseadapter - Fatal编程技术网

如何通过编程使GridView android中的子视图高度相等

如何通过编程使GridView android中的子视图高度相等,android,android-gridview,baseadapter,Android,Android Gridview,Baseadapter,我正在片段中显示一个GridView。我已经声明了一个GridView thr xml。我正在将值传递给GridView到Baseadapter。在适配器类中,我正在添加customView(xml文件) 基于动态值,我删除了gridView的一些子视图中的一些图像元素。当存在图像时,子视图的高度与不包含图像的子视图不同 我希望在gridView的所有子级上获得统一的高度。没有直接的API来设置gridView的高度 我不知道是否可以通过xml声明或通过gridView的属性以编程方式设置高度

我正在片段中显示一个GridView。我已经声明了一个GridView thr xml。我正在将值传递给GridView到Baseadapter。在适配器类中,我正在添加customView(xml文件)

基于动态值,我删除了gridView的一些子视图中的一些图像元素。当存在图像时,子视图的高度与不包含图像的子视图不同

我希望在gridView的所有子级上获得统一的高度。没有直接的API来设置gridView的高度

我不知道是否可以通过xml声明或通过gridView的属性以编程方式设置高度

因此,我试图以编程方式获取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;
   }
}