XML이 아닌 코드를 사용하여 ImageView의 여백을 설정하는 방법 다음 layout_margin과 같이 사용할 수 있습니다

ImageView여백이있는 레이아웃에 알 수없는 뷰 를 추가하고 싶습니다 . XML에서는 다음 layout_margin과 같이 사용할 수 있습니다 .

<ImageView android:layout_margin="5dip" android:src="@drawable/image" />

없다 ImageView.setPadding()하지만, ImageView.setMargin(). 나는 그것이 라인을 따라 생각ImageView.setLayoutParams(LayoutParams) 하지만, 무엇을 공급 해야할지 확실하지 않습니다.

아는 사람 있나요?



답변

android.view.ViewGroup.MarginLayoutParams방법이 setMargins(left, top, right, bottom)있습니다. 직접 서브 클래스는 다음과 같습니다 FrameLayout.LayoutParams, LinearLayout.LayoutParams그리고 RelativeLayout.LayoutParams.

예를 들어, 사용 LinearLayout:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(left, top, right, bottom);
imageView.setLayoutParams(lp);

여백 레이아웃 파라미터

여백을 픽셀 단위로 설정합니다. 확장하려면

context.getResources().getDisplayMetrics().density

디스플레이 메트릭스


답변

    image = (ImageView) findViewById(R.id.imageID);
    MarginLayoutParams marginParams = new MarginLayoutParams(image.getLayoutParams());
    marginParams.setMargins(left_margin, top_margin, right_margin, bottom_margin);
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
    image.setLayoutParams(layoutParams);


답변

위의 모든 예는 실제로 것이다 교체 요구되지 않을 수 있습니다보기, 이미 존재하는 PARAMS을. 아래 코드는 기존 매개 변수를 바꾸지 않고 확장합니다.

ImageView myImage = (ImageView) findViewById(R.id.image_view);
MarginLayoutParams marginParams = (MarginLayoutParams) image.getLayoutParams();
marginParams.setMargins(left, top, right, bottom);


답변

Kevin의 코드는 중복 MarginLayoutParams객체를 만듭니다 . 간단한 버전 :

ImageView image = (ImageView) findViewById(R.id.main_image);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(image.getLayoutParams());
lp.setMargins(50, 100, 0, 0);
image.setLayoutParams(lp);


답변

이미지 뷰 여백을 변경하고 다른 여백은 그대로 두십시오.

  1. 이 경우 이미지보기의 MarginLayoutParameters를 가져옵니다. myImageView

     MarginLayoutParams marginParams = (MarginLayoutParams) myImageView.getLayoutParams();
  2. 이제 변경하려는 여백을 변경하고 나머지는 그대로 두십시오.

     marginParams.setMargins(marginParams.leftMargin,
                             marginParams.topMargin,
                             150, //notice only changing right margin
                             marginParams.bottomMargin); 

답변

dp에 여백을 지정하려는 경우이 방법을 사용할 수 있습니다.

private void addMarginsInDp(View view, int leftInDp, int topInDp, int rightInDp, int bottomInDp) {
    DisplayMetrics dm = view.getResources().getDisplayMetrics();
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    lp.setMargins(convertDpToPx(leftInDp, dm), convertDpToPx(topInDp, dm), convertDpToPx(rightInDp, dm), convertDpToPx(bottomInDp, dm));
    view.setLayoutParams(lp);
}

private int convertDpToPx(int dp, DisplayMetrics displayMetrics) {
    float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics);
    return Math.round(pixels);
}


답변

나는 이것을 간단히 사용하고 훌륭하게 작동합니다.

ImageView imageView = (ImageView) findViewById(R.id.image_id);
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) imageView.getLayoutParams();
layoutParams.setMargins(left, top, right, bottom);
imageView.setLayoutParams(layoutParams);

setMargins () 의 단위는 dp가 아닌 픽셀입니다. dp로 여백을 설정하려면 values ​​/ dimens.xml 파일 안에 다음 과 같이 치수를 작성하십시오.

<resources>
    <dimen name="right">16dp</dimen>
    <dimen name="left">16dp</dimen>
</resources>

다음과 같이 액세스하십시오.

getResources().getDimension(R.dimen.right);