如何获取GridLayout中TextView所在的行和列
如何获取GridLayout中TextView所在的行和列
嘿,这事儿其实挺简单的,咱们直接看怎么操作就行~
GridLayout给子View设置的行列信息,其实都存在它专属的LayoutParams里,所以咱们只要拿到这个LayoutParams,就能轻松取出对应的行和列索引啦。
具体步骤:
- 先拿到你要获取行列的
TextView实例,不管是通过findViewById还是在点击事件里通过View v获取都可以。 - 把这个View的LayoutParams强转为
GridLayout.LayoutParams,因为只有这个类型的参数里才包含行列的配置信息。 - 通过
rowSpec.getIndex()获取行索引,columnSpec.getIndex()获取列索引——这里要注意,索引是从0开始的,和你XML里写的layout_row、layout_column数值完全对应哦。
代码示例
比如你在Activity里直接获取某个TextView的行列:
TextView targetTv = findViewById(R.id.tv00); // 强转为GridLayout的LayoutParams GridLayout.LayoutParams layoutParams = (GridLayout.LayoutParams) targetTv.getLayoutParams(); int rowIndex = layoutParams.rowSpec.getIndex(); int columnIndex = layoutParams.columnSpec.getIndex(); // 打印或者使用这两个值 Log.d("GridInfo", "当前TextView在第" + rowIndex + "行,第" + columnIndex + "列");
如果是在点击事件里动态获取被点击的TextView的行列,也很方便:
targetTv.setOnClickListener(v -> { GridLayout.LayoutParams params = (GridLayout.LayoutParams) v.getLayoutParams(); int row = params.rowSpec.getIndex(); int column = params.columnSpec.getIndex(); Toast.makeText(this, "你点了第" + (row + 1) + "行,第" + (column + 1) + "列的文本框", Toast.LENGTH_SHORT).show(); });
小提醒
要是你的TextView外面还嵌套了其他布局(比如LinearLayout),那直接拿TextView的LayoutParams就不是GridLayout的了,这时候得先找到它在GridLayout里的直接父容器,再去拿父容器的LayoutParams才行。不过一般咱们都是把TextView直接作为GridLayout的子View,所以上面的方法完全够用~
备注:内容来源于stack exchange,提问作者Carlus Magnus
相关产品推荐
相关产品推荐

