我有一个GuideLine
,页面左侧降低了15%。
我可以在下面的代码中得到它的一部分:
float percent = ((ConstraintLayout.LayoutParams) guideline.getLayoutParams()).guidePercent;
输出:0.15
如何获得像素或dpi值?
最佳答案
假设ConstraintLayout
已经布置好了,那么您可以使用guideline.getTop()
表示水平基准线,并使用guideline.getLeft()
表示垂直基准线,以像素为单位来计算上下左右距离。
如果ConstraintLayout
的尚未被布局(例如,您处于 Activity 的onCreate()
中),那么您必须等待直到布局完毕: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.constraint); constraintLayout.post(new Runnable() { @Override public void run() { Guideline guideline = findViewById(R.id.guideline); Log.i(TAG, guideline.getLeft() + ""); } }); }
注意, getLeft()
/ getTop()
将返回以像素为单位的大小。此大小将指出Guideline
和其父代ConstraintLayout
之间的距离。这意味着该值不是绝对的,而是相对于其父级的。
如果要获取绝对值(例如,您的ConstraintLayout
深度嵌套在 View 层次结构内部,并且您想了解Guideline
与屏幕左侧的距离,请使用 View#getLocationOnScreen(int[])
API: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.constraint); constraintLayout.post(new Runnable() { @Override public void run() { Guideline guideline = findViewById(R.id.guideline); int[] location = new int[2]; guideline.getLocationOnScreen(location); Log.i(TAG, location[0] + " " + location[1]); } }); }