以编程方式获取指南百分比大小

时间:2017-11-17 04:36:03

标签: android android-layout kotlin android-view android-constraintlayout

我有GuideLine,页面左侧15%。

我可以在此代码中获得一定比例的内容:

float percent = ((ConstraintLayout.LayoutParams) guideline.getLayoutParams()).guidePercent;

输出:0.15

如何获得像素值或dpi值?

3 个答案:

答案 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