157

Sto sviluppando Android v2.2 app.Aggiungi padding in vista programmaticamente

Ho un frammento .

Nel onCreateView(...) callback della mia classe frammento, mi gonfio un layout per il frammento come di seguito:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.login, null); 

    return view; 
} 

È possibile che questo file di layout gonfiato è (login.xml):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Username" /> 


    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Username" /> 

</LinearLayout> 

I desidera impostare un paddingTop nell'elemento <LinearLayout> precedente e voglio farlo nel codice Java invece di farlo in xml.

Come impostare paddingTop a <LinearLayout> nel mio codice classe Java frammento ??

+2

Avrai bisogno di assegnare un ID al vostro LinearLayout modo che si potrebbe trovare con 'findViewById'and quindi chiamare 'setPadding' su di esso. –

+0

@AleksG In generale si, ma dato che LinearLayout è l'elemento radice della gerarchia gonfiata qui non è necessario. 'view' è già LinearLayout, non c'è bisogno di trovarlo di nuovo in questo caso. Dato questo è uno speciale però. –

+1

@alextsc: sì, sono d'accordo. Ciononostante, preferisco comunque assegnare gli ID a tutto ciò a cui posso far riferimento nell'applicazione. –

risposta

375

view.setPadding(0,padding,0,0);

questo imposterà il padding superiore a padding -pixels.

Se si desidera impostare in dp invece, si può fare un conversion:

float scale = getResources().getDisplayMetrics().density; 
int dpAsPixels = (int) (sizeInDp*scale + 0.5f); 
+0

Qual è l'unità utilizzata in questo modo, dp? px? –

+1

In [Pixel] (http://developer.android.com/reference/android/view/View.html) –

+5

@ Leem.fin come dice Chris, è pixel. Se vuoi dp dovrai fare la conversione manualmente: 'float scale = getResources(). GetDisplayMetrics(). Density;' 'int size = (int) (sizeInPx * scale + 0.5f);' – Jave

12

È possibile impostare imbottitura per la visualizzazione da pro grammaticalmente tutta sottostante Codice -

view.setPadding(0,1,20,3); 

E, Inoltre ci sono diversi tipi di imbottitura disponibili -

Padding

PaddingBottom

PaddingLeft

PaddingRight

PaddingTop

Questi, i collegamenti si riferiranno sito Android Developers. Spero che questo ti aiuti molto.

+0

Grazie. Qual è l'unità utilizzata in questo modo, dp? px? –

+0

@ Leem.fin [Date un'occhiata a questo] (http://stackoverflow.com/a/2025541/940096) sarete in grado di conoscere la differenza. – Praveenkumar

74

Per rispondere alla tua seconda domanda:

view.setPadding(0,padding,0,0); 

come SPK e Jave suggerito, imposterà l'imbottitura in pixel. Puoi impostarlo in dp calcolando il valore dp come segue:

int paddingDp = 25; 
float density = context.getResources().getDisplayMetrics().density 
int paddingPixel = (int)(paddingDp * density); 
view.setPadding(0,paddingPixel,0,0); 

Sperare che aiuti!

+3

Ovviamente questo verrà compilato e funzionerà come previsto, ma per motivi di chiarezza è necessario cambiare la denominazione delle variabili int. Perché definisci il padding in DP e calcoli quello che sarebbe in pixel per questo dato dispositivo. – Glenn85

+0

Si sta convertendo dp in pixel. I nomi delle variabili sono confusi. "paddingPixel" significa davvero dp –

61

Se si memorizza l'imbottitura in file di risorse, si può semplicemente chiamare

int padding = getResources().getDimensionPixelOffset(R.dimen.padding); 

Lo fa la conversione per voi.

3

Scrivi il seguente codice per impostare il riempimento, potrebbe essere utile.

TextView ApplyPaddingTextView = (TextView)findViewById(R.id.textView1); 
    final LayoutParams layoutparams = (RelativeLayout.LayoutParams) ApplyPaddingTextView.getLayoutParams(); 

    layoutparams.setPadding(50,50,50,50); 

    ApplyPaddingTextView.setLayoutParams(layoutparams); 

Utilizzare LinearLayout.LayoutParams o RelativeLayout.LayoutParams in base alla disposizione genitore del bambino vista

1

Mentre imbottitura a livello di codice, convertire in valori relativi di densità convertendo pixel per Dp.

5

Utilizzando TypedValue è un modo molto più pulito di conversione in pixel rispetto a calcolare manualmente:

float paddingDp = 10f; 
// Convert to pixels 
int paddingPx = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, paddingDp, context.getResources().getDisplayMetrics()); 
view.setPadding(paddingPx, paddingPx, paddingPx, paddingPx); 

Essenzialmente, TypedValue.applyDimension converte l'imbottitura desiderata in pixel opportunamente seconda proprietà di visualizzazione del dispositivo corrente.

Per ulteriori informazioni vedere: TypedValue.applyDimension Docs.

+1

non dovrebbe essere invertito px e dp? – chris838

+0

Penso che l'essenza di ciò che sto facendo sia corretta. Comunque il nome è confuso, penso. Lo modificherò per essere più chiaro. Grazie per il feedback. – i2097i

4

uso di seguito metodo di fissazione imbottitura dinamicamente

setPadding(int left, int top, int right, int bottom) 

Esempio:

view.setPadding(2,2,2,2); 
Problemi correlati