답변

0

ConstraintLayout이 이미 배치되었다고 가정하면 수평 가이드 라인은 guideline.getTop()이고 수직 가이드 라인은 guideline.getLeft()을 사용하여 픽셀의 상단 또는 좌측 거리를 얻을 수 있습니다. ,

 

    @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() 것을 : ConstraintLayout 아직 배치되지 않은

경우에, 당신은이 배치 될 때까지 기다릴 필요가 (당신이 활동의 ​​onCreate()에서 말하는) 픽셀 단위로 크기를 반환합니다. 이 크기는 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]); 
      } 
     }); 
    } 
 
1

전화 dp가 여러 화면에 대해 다양하기 때문에 dp 수식으로 직접 변환 비율을 찾을 수 없습니다. 그러나 dp에서 그 값을 얻는 간단한 논리가 있습니다.

1) 화면 너비 (500dp)

2) 레이아웃의 여백 (15 %)의 비율을 계산하는 계산이 논리는 모든 장치의 크기를 작동

float dpvalue=totalwidth * percentage 

//500 *(0.15) =75(dpvalue) 

폭.