xml이 아닌 코드를 사용하여 ImageView 마진을 설정하는 방법
알 수 없는 수를 추가합니다.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);
위의 모든 예제는 실제로 보기에 이미 존재하는 모든 매개변수를 대체합니다. 이 매개변수는 필요하지 않을 수 있습니다.아래 코드는 기존 매개변수를 대체하지 않고 기존 매개변수만 확장합니다.
ImageView myImage = (ImageView) findViewById(R.id.image_view);
MarginLayoutParams marginParams = (MarginLayoutParams) image.getLayoutParams();
marginParams.setMargins(left, top, right, bottom);
케빈의 코드는 중복을 만듭니다.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);
이미지 보기 여백을 변경하지만 다른 여백은 그대로 유지하려는 경우.
이 경우 이미지 보기의 여백 레이아웃 매개 변수를 가져옵니다.
myImageViewMarginLayoutParams marginParams = (MarginLayoutParams) myImageView.getLayoutParams();이제 변경할 마진만 변경하고 나머지 마진은 그대로 유지합니다.
marginParams.setMargins(marginParams.leftMargin, marginParams.topMargin, 150, //notice only changing right margin marginParams.bottomMargin);
2020년부터 답변:
dependencies {
implementation "androidx.core:core-ktx:1.2.0"
}
코드로 간단히 계산합니다.
view.updateLayoutParams<ViewGroup.MarginLayoutParams> {
setMargins(5)
}
저는 이것을 간단하게 사용하고 아주 잘 작동합니다.
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);
코틀린을 사용하는 경우 확장 함수를 만들어 단순화할 수 있습니다.
fun View.setMarginExtensionFunction(left: Int, top: Int, right: Int, bottom: Int) {
val params = layoutParams as ViewGroup.MarginLayoutParams
params.setMargins(left, top, right, bottom)
layoutParams = params
}
이제 보기만 있으면 되며, 이 확장 기능은 어디서나 사용할 수 있습니다.
val imageView = findViewById(R.id.imageView)
imageView.setMarginExtensionFunction(0, 0, 0, 0)
여백을 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);
}
레이아웃을 동적으로 만들고 매개 변수를 setmargin()으로 설정하면 이미지에서 직접 작동하지 않습니다.보기
ImageView im;
im = (ImageView) findViewById(R.id.your_image_in_XML_by_id);
RelativeLayout.LayoutParams layout = new RelativeLayout.LayoutParams(im.getLayoutParams());
layout.setMargins(counter*27, 0, 0, 0);//left,right,top,bottom
im.setLayoutParams(layout);
im.setImageResource(R.drawable.yourimage)
제게는 효과가 있었습니다.
int imgCarMarginRightPx = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, definedValueInDp, res.getDisplayMetrics());
MarginLayoutParams lp = (MarginLayoutParams) imgCar.getLayoutParams();
lp.setMargins(0,0,imgCarMarginRightPx,0);
imgCar.setLayoutParams(lp);
샘플 코드는 여기 있습니다, 그것은 매우 쉽습니다.
LayoutParams params1 = (LayoutParams)twoLetter.getLayoutParams();//twoletter-imageview
params1.height = 70;
params1.setMargins(0, 210, 0, 0);//top margin -210 here
twoLetter.setLayoutParams(params1);//setting layout params
twoLetter.setImageResource(R.drawable.oo);
코틀린에서 당신은 그것을 더 기분 좋은 방법으로 쓸 수 있습니다.
myView.layoutParams = LinearLayout.LayoutParams(
RadioGroup.LayoutParams.MATCH_PARENT, RadioGroup.LayoutParams.WRAP_CONTENT
).apply {
setMargins(12, 12, 12, 12)
}
다음은 왼쪽, 위, 오른쪽, 아래에 8px 마진을 추가하는 예입니다.
ImageView imageView = new ImageView(getApplicationContext());
ViewGroup.MarginLayoutParams marginLayoutParams = new ViewGroup.MarginLayoutParams(
ViewGroup.MarginLayoutParams.MATCH_PARENT,
ViewGroup.MarginLayoutParams.WRAP_CONTENT
);
marginLayoutParams.setMargins(8, 8, 8, 8);
imageView.setLayoutParams(marginLayoutParams);
이와 유사한 방법을 사용하면 경우에 따라 두통을 줄일 수 있습니다.여백이 있는 프로그램 조정의 패스가 두 개 있는 경우 이미 일부 레이아웃Params가 설정되어 있는지 확인하는 것이 더 안전합니다.이미 일부 여유가 있는 경우에는 여유를 늘리지 않고 대체해야 합니다.
public void addMargins(View v, int left, int top, int right, int bottom) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) v.getLayoutParams();
if (params == null)
params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
int oldLeft = params.leftMargin;
int oldTop = params.topMargin;
int oldRight = params.rightMargin;
int oldBottom = params.bottomMargin;
params.setMargins(oldLeft + left, oldTop + top, oldRight + right, oldBottom + bottom);
v.setLayoutParams(params);
}
선형 레이아웃 매개 변수를 만들고 dp 값에 resource.getDimensionPixelSize를 사용할 수 있습니다.
val mContext = parent.context
val mImageView = AppCompatImageView(mContext)
mImageView.setBackgroundResource(R.drawable.payment_method_selector)
val height = mContext.resources.getDimensionPixelSize(R.dimen.payment_logo_height)
val width = mContext.resources.getDimensionPixelSize(R.dimen.payment_logo_width)
val padding = mContext.resources.getDimensionPixelSize(R.dimen.spacing_small_tiny)
val margin = mContext.resources.getDimensionPixelSize(R.dimen.spacing_small)
mImageView.layoutParams = LinearLayout.LayoutParams(width, height).apply {
setMargins(margin, margin, 0, 0)
}
mImageView.setPadding(padding, padding, padding, padding)
언급URL : https://stackoverflow.com/questions/3416087/how-to-set-margin-of-imageview-using-code-not-xml
'programing' 카테고리의 다른 글
| 일부 데이터를 다른 조각으로 전송하는 방법은 무엇입니까? (0) | 2023.09.04 |
|---|---|
| 하나의 쿼리에서 여러 테이블에 삽입 (0) | 2023.09.04 |
| jquery 쿠키의 json 데이터 개체 저장 (0) | 2023.09.04 |
| 자바.java.java런타임예외:작업 ComponentInfo를 인스턴스화할 수 없습니다. (0) | 2023.09.04 |
| 이벤트를 한 번만 바인딩 (0) | 2023.09.04 |