2012-07-02 18 views
31

Cómo cambiar el ancho de un botón mediante programación. Puedo cambiar la altura, pero el ancho no cambia. Siguiente es mi fragmento de códigoCambiar el ancho del botón mediante programación en Android

private void createButton(final String label) 
{ 

    Button button = new Button(this); 
    button.setText(label); 


    button.setWidth(10); 
    button.setHeight(100); 

    button.setOnClickListener(new OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 


     } 
    }); 
    mMenuContainer.addView(button, mMenuItemLayoutParamters); 


} 

Pero el ancho del botón ocupa el ancho de la pantalla.

Respuesta

75

button.setLayoutParams(new LinearLayout.LayoutParams(10, 100));

debería haber trabajo para usted.

Hay un ejemplo impresionante en línea para esto: check this


debe aplicar LayoutParams del ViewGroup que contiene su View. Es decir, si el botón está dentro RelativeLayout, se debe utilizar RelativeLayout.LayoutParams

+3

importante tener en cuenta: debe aplicar 'LayoutParams' del' ViewGroup' que contiene su 'View'. Es decir, si su botón está dentro de 'RelativeLayout', debe usar' RelativeLayout.LayoutParams'. – agamov

+0

Entonces, ¿cómo especificar la unidad? –

+1

Debe multiplicar sus valores de tamaño por la escala de visualización, porque el constructor toma píxeles, no dp. Como tal: widthInPixels = getResources(). GetDisplayMetrics().densidad * anchoInDp; –

31

puede hacerlo de esta manera.

LinearLayout.LayoutParams params = button.getLayoutParams(); 
params.width = 100; 
button.setLayoutParams(params); 

pero asegúrese de hacerlo, después de agregar su botón a uno de los padres. y LinearLayout.LayoutParams se usa cuando parent es LinearLayout y cuando parent es RelativeLayout use RelativeLayout.LayoutParams.

+3

gracias, resueltos mis problemas: D! – Bhimbim

0

Intente utilizar solamente mMenuContainer.addView(button);

1

puede hacer esto

int width= (int)getResources().getDimension(R.dimen.button_width); 
    int heigth= (int)getResources().getDimension(R.dimen.button_heigth); 
    ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(width, heigth); 
    button.setLayoutParams(layoutParams); 
0

He resuelto mediante el uso de esto:

//ImageButton creation 
final ImageButton server_icon_button=new ImageButton(getApplicationContext()); 
//setting background image in drawable 
server_icon_button.setBackgroundResource(R.drawable.bonsai); 
//After adding ImageButton to the parent i done this 
server_icon_button.getLayoutParams().height=180; 
server_icon_button.getLayoutParams().width=100; 

espero que esto ayuda.

0

En mi caso, estoy usando AppCompatImageButton (y AppCompat). Resulta que si guardo las imágenes ajustadas por densidad en las distintas carpetas dibujables : drawable-ldpi, drawable-mdpi, drawable-hdpi, etc., entonces el botón no se escalará. En su lugar tuve que poner un solo dibujable para cada botón en drawable-nodpi. Asegúrese de que la imagen del botón drawable-nodpi sea del tamaño más grande que necesite. Android no ampliará el tamaño del botón; sin embargo, puede reducir el tamaño. He creado un botón en XML como esto:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:meter="http://schemas.android.com/apk/res-auto" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <android.support.v7.widget.AppCompatImageButton 
     android:id="@+id/button" 
     style="@style/ButtonStyle" 
     android:baselineAlignBottom="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:minHeight="0dp" 
     android:minWidth="0dp" 
     app:srcCompat="@drawable/button_selector" 
     android:background="?attr/selectableItemBackgroundBorderless" 
     android:contentDescription="@string/button" 
     android:focusable="true"> 
</RelativeLayout> 

<!-- styles.xml --> 
<style name="ButtonStyle" parent="MyAppTheme"> 
    <item name="android:scaleType">centerInside</item> 
    <item name="android:adjustViewBounds">true</item> 
    <item name="colorControlHighlight">@color/buttonColorPressed</item> 
    <item name="colorButtonNormal">@color/buttonColor</item> 
</style> 

<!-- v21/styles.xml --> 
<style name="TargetButton" parent="MyAppTheme"> 
    <item name="android:scaleType">centerInside</item> 
    <item name="android:adjustViewBounds">true</item> 
    <item name="colorControlHighlight">@color/buttonColorPressed</item> 
    <item name="colorButtonNormal">@color/buttonColor</item> 
    <item name="android:elevation">@dimen/button_elevation</item> 
</style> 

<!-- drawable/button_selector.xml --> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/button_pressed" android:state_pressed="true"/> 
    <item android:drawable="@drawable/button"/> 
</selector> 

<!-- drawable/button.xml --> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
     android:src="@drawable/ic_button" 
     android:gravity="center" /> 

<!-- drawable/button_pressed.xml --> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
     android:src="@drawable/ic_button_pressed" 
     android:gravity="center" /> 

A continuación, en onCreate al recuperar el botón, llamar adjustButtonSize (que puse en mi clase base):

mButton = (AppCompatImageButton) findViewById(R.id.button); 
    adjustButtonSize(mButton); 

public void adjustButtonSize(AppCompatImageButton button) { 
    DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); 
    int width = displayMetrics.widthPixels; 
    int height = displayMetrics.heightPixels; 
    ViewGroup.LayoutParams params = button.getLayoutParams(); 
    params.height = height/10;   // 10% 
    params.width = ((width * 20)/100); // 20% 
    button.setLayoutParams(params); 
} 
Cuestiones relacionadas