我有GuideLine
,页面左侧15%。
我可以在此代码中获得一定比例的内容:
float percent = ((ConstraintLayout.LayoutParams) guideline.getLayoutParams()).guidePercent;
输出:0.15
如何获得像素值或dpi值?
答案 0 :(得分:1)
我没有找到任何dp公式的直接转换百分比,因为手机dp因多个屏幕而异。但我有简单的逻辑来在dp中获取该值。
1)计算屏幕宽度(500dp)
2)计算布局宽度的边际百分比(15%)
float dpvalue=totalwidth * percentage
//500 *(0.15) =75(dpvalue)
此逻辑将适用于所有设备大小。
答案 1 :(得分:0)
假设已经布置了ConstraintLayout
,那么您可以使用guideline.getTop()
作为水平指南,使用guideline.getLeft()
作为垂直指南,以像素为单位获得顶部或左侧距离。
如果ConstraintLayout
尚未尚未布置(假设您处于活动的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
深深地嵌套在视图层次结构中,并且你想要了解屏幕左边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]);
}
});
}
答案 2 :(得分:0)
Java代码:
Guideline guideline = (Guideline)findViewById(R.id.guideline)
float percent = ((ConstraintLayout.LayoutParams)guideline.getLayoutParams()).guidePercent
科特琳代码:
val guideline1 = findViewById<Guideline>(R.id.guideline)
val percent = (guideline1.layoutParams as ConstraintLayout.LayoutParams).guidePercent