以编程方式获取指南百分比大小(以像素为单位)
Get Guideline percent size in pixels programmatically
我有一个 GuideLine
,页面左侧 15% 的折扣。
我可以在这段代码中得到它的百分比:
float percent = ((ConstraintLayout.LayoutParams) guideline.getLayoutParams()).guidePercent;
输出:0.15
如何获取像素或 dpi 值?
我找不到任何直接转换为 dp 公式的百分比,因为 phone dp 因多个因素而异 screen.but 我有简单的逻辑来获得 dp 中的值。
1) 计算屏幕宽度(500dp)
2) 计算您的边距 (15%) 占布局宽度的百分比
float dpvalue=totalwidth * percentage
//500 *(0.15) =75(dpvalue)
此逻辑适用于所有设备尺寸。
假设 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()
将 return 像素大小。此大小将指出 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]);
}
});
}
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
我有一个 GuideLine
,页面左侧 15% 的折扣。
我可以在这段代码中得到它的百分比:
float percent = ((ConstraintLayout.LayoutParams) guideline.getLayoutParams()).guidePercent;
输出:0.15
如何获取像素或 dpi 值?
我找不到任何直接转换为 dp 公式的百分比,因为 phone dp 因多个因素而异 screen.but 我有简单的逻辑来获得 dp 中的值。
1) 计算屏幕宽度(500dp)
2) 计算您的边距 (15%) 占布局宽度的百分比
float dpvalue=totalwidth * percentage
//500 *(0.15) =75(dpvalue)
此逻辑适用于所有设备尺寸。
假设 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()
将 return 像素大小。此大小将指出 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]);
}
});
}
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