简体   繁体   English

动态/以编程方式设置具有可绘制背景的按钮的大小

[英]Set size of button with drawable background dynamically/programmatically

I have a button that has the following properties: 我有一个具有以下属性的按钮:

circle_normal.xml (in res/drawable) circle_normal.xml(在res / drawable中)

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:shape="oval" >

    <solid android:color="#FF6347" />

    <size
        android:height="325dp"
        android:width="325dp" />
</shape>

circle.xml (in res/drawable) circle.xml(在res / drawable中)

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/circle_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/circle_normal"></item>

</selector>

activity_main.xml (in res/layout) activity_main.xml(在res / layout中)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Main" >

    <Button
        android:id="@+id/button_study"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@drawable/circle"
        android:gravity="center" />
</RelativeLayout>

Main.java (in src) Main.java(在src中)

buttonStudy = (Button) findViewById(R.id.button_study);

The final product is that I get a button that is in the shape of a circle. 最终的结果是我得到一个圆形的按钮。 However, due to the difference screen sizes on different Android devices, this one circle size is insufficient. 但是,由于不同的Android设备上的屏幕尺寸不同,因此这一圆圈大小不足。 I've looked at a few other questions similar to this but their solutions didn't help me very much. 我看过其他一些与此类似的问题,但是他们的解决方案对我没有太大帮助。 How do I change its size dynamically in the Java code? 如何在Java代码中动态更改其大小?

try this way 尝试这种方式

final Button buttonStudy = (Button) findViewById(R.id.button_study);
buttonStudy.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ViewGroup.LayoutParams params = buttonStudy.getLayoutParams();
        params.width = 100;//change the width size
        params.height= 100;//change the hight size
        buttonStudy.setLayoutParams(params);
    }
});

cheerz 啦啦队

btn = (Button) findViewByID(R.id.button_study);

btn.getLayoutParams().height = x;
btn.getLayoutParams().width = x;

btn.setLayoutParams(btn.getLayoutParams);

Using this code, you can set the height and width of the button. 使用此代码,您可以设置按钮的高度和宽度。 Also, this would avoid the parent view parsing conflict. 而且,这将避免父视图解析冲突。

Also, you can get the size of screen and then set size of button accordingly:- 另外,您可以获取屏幕的大小,然后相应地设置按钮的大小:-

For API<13 对于API <13

Display display = getWindowManager().getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight(); //not required, just to inform

int x = (int) screenWidth/10; //replace 10 by scaling factor

btn = (Button) findViewByID(R.id.button_study);

btn.getLayoutParams().height = x;
btn.getLayoutParams().width = x;

btn.setLayoutParams(btn.getLayoutParams);

For API>=13 对于API> = 13

Point size = new Point();
display.getSize(size);
int screenWidth = size.x;
int screenHeight = size.y; //not required, just for info

int x = (int) screenWidth/10; //replace 10 by scaling factor
btn = (Button) findViewByID(R.id.button_study);

btn.getLayoutParams().height = x;
btn.getLayoutParams().width = x;

btn.setLayoutParams(btn.getLayoutParams);

to check for API level at runtime, use 在运行时检查API级别,请使用

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {

         //<code> if API>=13 (HONEYCOMB_MR2 is API 13)
}

else {

         //<code> if API<13
}

Hope it helps. 希望能帮助到你。 Happy Programming :) 快乐编程:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM