2

私はGuideLine、ページの左側に15%オフしています。ガイドラインパーセントサイズをプログラムで取得する

私はこのコードでは、それの割合を取得することができます:

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

出力:0.15

どのように私は、ピクセルまたはdpiの値を得ることができますか?

答えて

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の間の距離を示します。つまり、値は絶対ではなく、親に対して相対的です。

あなたは絶対値を取得したい場合は、あなたがView#getLocationOnScreen(int[]) APIを利用する必要がある(あなたのConstraintLayoutが深くビュー階層内にネストされ、そしてあなたは、画面の左からGuidelineどれだけ離れているかを理解したいと言う):

 

    @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が複数のscreen.butのために変わっているので、私はdpでその値を得るための単純なロジックを持っているので、dpの式に直接変換率はありません。レイアウト幅の

1)スクリーン幅(500dp)

2を計算して)あなたのマージン(15%の割合を計算)

float dpvalue=totalwidth * percentage 

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

このロジックは、すべてのデバイスのサイズを動作します。

関連する問題