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);
답변
이미지 뷰 여백을 변경하고 다른 여백은 그대로 두십시오.
-
이 경우 이미지보기의 MarginLayoutParameters를 가져옵니다.
myImageView
MarginLayoutParams marginParams = (MarginLayoutParams) myImageView.getLayoutParams();
-
이제 변경하려는 여백을 변경하고 나머지는 그대로 두십시오.
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);