Reputation: 1223
I have a button that has the following properties:
circle_normal.xml (in 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)
<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)
<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)
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. 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?
Upvotes: 2
Views: 7749
Reputation: 1992
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);
}
});
Upvotes: 6
Reputation: 1582
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
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
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
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 :)
Upvotes: 2