157

Estoy desarrollando Android v2.2.Agregar relleno en vista programáticamente

Tengo fragmento.

En el onCreateView(...) de devolución de llamada de mi clase fragmento, inflè un diseño al fragmento, como a continuación:

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

    return view; 
} 

Lo anterior archivo de diseño es inflado (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 Me gustaría establecer un paddingTop en el elemento <LinearLayout> anterior, y quiero hacerlo en el código Java en lugar de hacerlo en xml.

Cómo configurar paddingTop en <LinearLayout> en mi fragmento código de clase Java ??

+2

Tendrá que asignar una identificación a su LinearLayout de manera que se puede encontrar con 'findViewById'and a continuación, llamar 'setPadding' en él. –

+0

@AleksG En general, sí, pero dado que LinearLayout es el elemento raíz de la jerarquía inflada, aquí no es necesario. 'view' ya es LinearLayout, no es necesario volver a encontrarlo en este caso. Dado que este es uno especial sin embargo. –

+1

@alextsc: sí, de acuerdo. Sin embargo, aún prefiero asignar identificaciones a todo lo que pueda referirme en la aplicación. –

Respuesta

375

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

Esto establecerá el relleno superior a padding -pixels.

Si desea establecer en dp lugar, se puede hacer un conversion:

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

¿Cuál es la unidad utilizada de esta manera, dp? ¿px? –

+1

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

+5

@ Leem.fin como dice Chris, son los píxeles. Si quieres dp que tendrá que hacer la conversión manualmente: 'escala de flotación = getResources() getDisplayMetrics() Densidad;' 'int size = (int) (sizeInPx * Escala + 0.5f);' ¿Dónde está – Jave

12

Puede establecer el relleno a la vista por Pro gramaticalmente largo por debajo de código -

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

Y, también hay diferentes tipos de relleno disponibles -

Padding

PaddingBottom

PaddingLeft

PaddingRight

PaddingTop

Estos, los enlaces se refieren los desarrolladores de Android sitio. Espero que esto te ayude mucho.

+0

Gracias. ¿Cuál es la unidad utilizada de esta manera, dp? ¿px? –

+0

@ Leem.fin [Eche un vistazo a este] (http://stackoverflow.com/a/2025541/940096) podrá conocer la diferencia. – Praveenkumar

74

para responder a su segunda pregunta:

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

como SPK y Jave sugerido, establecerá el relleno en píxeles. Se puede establecer en DP mediante el cálculo del valor de DP de la siguiente manera:

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

Espero que ayude!

+3

Por supuesto, esto se compilará y funcionará como se esperaba, pero en aras de la claridad, debe cambiar el nombre de sus variables int. Porque define su relleno en DP y calcula lo que sería en píxeles para este dispositivo dado. – Glenn85

+0

Usted está convirtiendo dp en pixel. Los nombres de las variables son confusos. "paddingPixel" realmente significa que dp –

61

Si almacena el relleno en los archivos de recursos, sólo tiene que llamar

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

Lo hace la conversión para usted.

3

Escribir siguiendo el código para establecer el relleno, puede ser de ayuda.

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

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

    ApplyPaddingTextView.setLayoutParams(layoutparams); 

Use LinearLayout.LayoutParams o RelativeLayout.LayoutParams de acuerdo con la disposición de los padres del niño, vista

1

Mientras que el relleno de programación, convertir a valores relacionados de densidad mediante la conversión de pixel a Dp.

5

Usando TypedValue es una forma mucho más limpia de convertir a los píxeles en comparación con el cálculo 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); 

Esencialmente, TypedValue.applyDimension convierte el relleno deseado en píxeles dependiendo apropiadamente en las propiedades de la pantalla del dispositivo actual. Para obtener más información, consulte: TypedValue.applyDimension Docs.

+1

no se debe invertir px y dp? – chris838

+0

Creo que la esencia de lo que estoy haciendo es correcta. Sin embargo, la denominación es confusa, creo. Lo editaré para que sea más claro. Gracias por la respuesta. – i2097i

4

temperaturas inferiores método para establecer el relleno de forma dinámica

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

Ejemplo:

view.setPadding(2,2,2,2); 
Cuestiones relacionadas