2011-11-12 3 views
10

qui è la code-Android: Impostare i margini in un FrameLayout non programmatically- lavorare

FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) searchPin.getLayoutParams(); 
params.setMargins(135, 176, 0, 0); 
//params.leftMargin = 135; // also not worked 
//params.topMargin = 376; 
searchPin.setLayoutParams(params); 

Dove mai, da XML sua operaia

android:layout_marginLeft="135dp" 

Quale può essere il motivo? mi sto perdendo qualcosa!

-thnx

+0

http: // StackOverflow. it/questions/5401952/framelayout-margin-not-working – mathheadinclouds

risposta

17

Prova questo:

params.gravity = Gravity.TOP; 
+2

o anche: params.gravity = Gravity.NO_GRAVITY; –

3

Penso che quello che ti manca è che, quando si impostano i parametri di programmazione per un elemento, tali parametri sono forniti in realtà al genitore vista, in modo che sappia come posizionare l'elemento. I parametri non sono ripristinati all'elemento stesso. Considera il seguente esempio di codice. Si noti inoltre che i parametri di layout sono del tipo del genitore.

LinearLayout linearLayout = new LinearLayout(this); 

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.FILL_PARENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT); 

layoutParams.setMargins(6,6,6,6); 

Button someButton=new Button(this); 
someButton.setText("some text"); 

linearLayout.addView(someButton, layoutParams); 
+0

cosa devo fare per elemento figlio? Invece di quello, devo aggiungere il padding per genitore - per posizionare correttamente il bambino! –

+0

thnx man, il riempimento ha funzionato con l'elemento figlio. risposta aggiunta. –

+0

no, non è necessario impostare il padding per l'elemento figlio, come riempimento al genitore. L'idea è più simile, si forniscono entrambi (elemento figlio + parametri di layout elemento figlio) al genitore, come nella riga addView. – hovanessyan

2

semplice soluzione-

searchPin = (ImageView) findViewById(R.id.waypts_search_pin); 
searchPin.setPadding(135, 176, 0, 0); 
+8

Beh, questo non aiuta veramente le altre persone che stanno cercando una risposta alla tua domanda, Padding non sposta il sfondo sul fotogramma, solo il contenuto. – htafoya

-1

Basta usare LayoutParams invece di FrameLayout.LayoutParams

LayoutParams params = (LayoutParams) searchPin.getLayoutParams(); 
params.setMargins(135, 176, 0, 0); 
searchPin.setLayoutParams(params); 

questo ha lavorato per me

+1

LayoutParams non ha un metodo setMargins. Hai appena importato android.widget.FrameLayout.LayoutParams – roarster

7

ho avuto un bambino FrameLayout di un RelativeLayout in modo che il quadro stava cercando di lanciare FrameLayout params a RelativeLayout, ho risolto in questo modo

FrameLayout mylayout = (FrameLayout) view.findViewById(R.id.mylayout); 
ViewGroup.MarginLayoutParams params = (MarginLayoutParams) mylayout.getLayoutParams(); 
params.setMargins(1, 2, 3, 4); 
mylayout.setLayoutParams(params); 
+0

se FrameLayout è figlio di RelativeLayout. hai impostato RelativeLayout.LayoutParams su FrameLayout –

+0

Il commento sopra dovrebbe essere la risposta accettata. – Magicode

+0

d'accordo w/nero romano: questa è la soluzione che ha funzionato per me. È necessario impostare i parametri con il tipo del genitore. – mtbomb

0

Si può provare questo

FrameLayout.LayoutParams srcLp = (FrameLayout.LayoutParams)searchPin.getLayoutParams(); 
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(srcLp.width, srcLp.height, srcLp.gravity); 

lp.setMargins(srcLp.leftMargin, srcLp.topMargin, srcLp.rightMargin, srcLp.bottomMargin); 

searchPin.setLayoutParams(lp);