我有一个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]); } }); }

10-04 14:50