如何以编程方式获取View的Gravity属性并识别具体值?
如何正确判断View的Gravity属性
你遇到的问题是因为Gravity的数值是位掩码组合值——一个View的gravity通常会同时包含水平和垂直方向的属性(比如Gravity.LEFT | Gravity.TOP),直接用==和单一Gravity常量(如Gravity.LEFT)比较自然会不匹配,那些陌生的大数值就是多个位掩码叠加的结果。
要正确判断Gravity类型,需要用**位运算&**来检查目标值是否包含指定的Gravity常量,具体实现如下:
View editView; ... int currentGravity = editView.getForegroundGravity(); // 判断水平方向是否为LEFT if ((currentGravity & Gravity.LEFT) == Gravity.LEFT) { mLeftGravityIv.setBackgroundColor(Color.GRAY); } // 判断水平方向是否为居中 else if ((currentGravity & Gravity.CENTER_HORIZONTAL) == Gravity.CENTER_HORIZONTAL) { mCenterGravityIv.setBackgroundColor(Color.GRAY); } // 判断水平方向是否为RIGHT else if ((currentGravity & Gravity.RIGHT) == Gravity.RIGHT) { mRightGravityIv.setBackgroundColor(Color.GRAY); }
补充说明:
- 如果需要判断完整的居中(水平+垂直),可以用
(currentGravity & Gravity.CENTER) == Gravity.CENTER - Gravity常量分为水平方向(LEFT、CENTER_HORIZONTAL、RIGHT)和垂直方向(TOP、CENTER_VERTICAL、BOTTOM),可以根据需求分别判断对应方向的属性
内容的提问来源于stack exchange,提问作者Babushka
相关产品推荐
相关产品推荐

