So setzen Sie den Rand von ImageView mit Code, nicht xml

Ich möchte eine unbekannte Anzahl von ImageView Ansichten zu meinem Layout mit Margin hinzufügen. In XML kann ich layout_margin wie layout_margin :

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

  • Integration von android ndk's ndk-gdb mit emacs?
  • Zeigen einen Alert-Dialog im Broadcast-Receiver nach einem System-Neustart
  • Android Emulator wird nicht auf ubuntu 12.04 nach dem Start von ssh starten
  • Warum bekommst man wieder falsche konvertierenobjekte auf separatedListAdapter?
  • Node.js npm auf Android
  • Android oder Java-Klasse benennen mit $ symbol
  • Es gibt ImageView.setPadding() , aber kein ImageView.setMargin() . Ich denke, es ist entlang der Linien von ImageView.setLayoutParams(LayoutParams) , aber nicht sicher, was in das zu füttern.

    Weiß jemand?

  • Benutzerdefinierter Kontoauthentiker. Die Bereinigung nach dem Entfernen des Kontos erfolgt
  • Verständnis der benutzerdefinierten Android Launcher
  • Cordova android emulator hörte auf zu arbeiten
  • Verhindern, dass WebView "Web-Seite nicht verfügbar" anzeigt
  • Ändern des Android-Sucher-Widgets, um vertikal zu arbeiten
  • Wie kann ich die Clip-Grenze auf Android-Leinwand antialias?
  • 11 Solutions collect form web for “So setzen Sie den Rand von ImageView mit Code, nicht xml”

    android.view.ViewGroup.MarginLayoutParams hat eine Methode setMargins(left, top, right, bottom) . Direkte Unterklassen sind: FrameLayout.LayoutParams , LinearLayout.LayoutParams und RelativeLayout.LayoutParams .

    Mit zB LinearLayout :

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

    MarginLayoutParams

    Dies setzt die Ränder in Pixel. Um es zu skalieren verwenden

     context.getResources().getDisplayMetrics().density 

    DisplayMetrics

      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); 

    Alle obigen Beispiele werden tatsächlich alle bereits vorhandenen Params für die Ansicht wiederherstellen, was nicht gewünscht werden kann. Der unten genannte Code verlängert nur die vorhandenen Params, ohne sie zu ersetzen:

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

    Kevins Code erzeugt redundantes MarginLayoutParams Objekt. Einfachere Version:

     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); 

    Sie können diese Methode verwenden, falls Sie die Ränder in dp angeben möchten:

     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); } 

    Wenn du den Imageview-Rand ändern willst, lass also alle anderen Ränder intakt.

    1. Erhalten Sie in diesem Fall myImageView Ihrer myImageView : myImageView

        MarginLayoutParams marginParams = (MarginLayoutParams) myImageView.getLayoutParams(); 
    2. Jetzt ändern Sie einfach den Rand, den Sie ändern möchten, aber lassen Sie die anderen, wie sie sind:

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

    Für mich hat das gearbeitet:

     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); 

    Ich benutze einfach das und funktioniert super:

     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 () 's Einheit ist pixel nicht dp. Wenn du den Rand in dp setzen willst, nur in deiner Werte / dimens.xml Datei deine Dimensionen wie:

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

    Und Zugang wie:

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

    Layout dynamisch erstellen und seinen Parameter als setmargin () festlegen, funktioniert nicht direkt auf einem imageView

     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) 

    Beispielcode ist hier, es ist ganz einfach

     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); 

    Mit einer ähnlichen Methode können Sie einige Kopfschmerzen in einigen Situationen sparen. Wenn Sie zwei Pässe programmgesteuertes Basteln mit Rändern haben, ist es sicherer zu prüfen, ob es bereits einige LayoutParams gesetzt haben. Wenn es noch einige Margen gibt, sollte man sie erhöhen und nicht ersetzen:

     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); } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.