2012-07-02 75 views
31

如何以编程方式更改按钮的宽度。我可以改变高度,但宽度不会改变。以下是我的代码片段以编程方式更改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); 


} 

但是按钮的宽度占用了屏幕的宽度。

回答

75

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

应该有适合你的工作。

有一个真棒实例在线这样的:check this


你应该申请包含您ViewViewGroupLayoutParams。也就是说,如果你的按钮是内部RelativeLayout,你应该使用RelativeLayout.LayoutParams

+3

重要的是要注意:你应该应用包含你的View的'ViewGroup'的'LayoutParams'。也就是说,如果你的按钮在'RelativeLayout'里面,你应该使用'RelativeLayout.LayoutParams'。 – agamov

+0

那么,如何指定单位? –

+1

您应该将尺寸值乘以显示比例,因为构造函数需要像素而不是dp。 像这样: widthInPixels = getResources()。getDisplayMetrics()。密度* widthInDp; –

31

你可以这样做。

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

但确保在将按钮添加到父项后执行此操作。当父母为LinearLayout且父母为RelativeLayout时,使用LinearLayout.LayoutParams,使用RelativeLayout.LayoutParams

+3

谢谢,解决了我的问题:D! – Bhimbim

0

尝试使用只有mMenuContainer.addView(button);

1

能做到这一点

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

我用这个解决:

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

我希望这帮助。

0

在我的情况下,我使用AppCompatImageButton(和AppCompat)。 事实证明,如果我将密度调整图像保存在各种可绘制的 文件夹中:drawable-ldpi,drawable-mdpi,drawable-hdpi等,那么按钮将不会缩放。 相反,我不得不为放置一个drawable-nodpi中的每个按钮。 确保可绘制的nodpi按钮图像是您需要的最大的大小。 Android不会缩放按钮大小;不过,它可以缩小尺寸。我在XML创建了一个按钮,像这样:

<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" /> 

接下来,在的onCreate当你检索按钮,呼叫adjustButtonSize(我把我的基类):

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); 
} 
相关问题