我的ImageButton没有像代码告诉它那样重新缩放。事实上,它没有做任何事情。
代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayShowCustomEnabled(true);
setTitle("Valour");
setContentView(R.layout.activity_main_screen);
getScreenRes();
}
public void getScreenRes() {
DisplayMetrics display = this.getResources().getDisplayMetrics();
int width = display.widthPixels;
int height = display.heightPixels;
int buttonheight = display.heightPixels / 8;
double buttonwidth = buttonheight * 2.66666667;
int buttonwidthint = (int) Math.round(buttonwidth);
ImageButton firsttimeFB = (ImageButton) findViewById(R.id.firsttime_fb);
firsttimeFB.getLayoutParams().width = buttonwidthint;
firsttimeFB.getLayoutParams().height = buttonheight;
}
XML:
<ImageButton
android:layout_width="50dip"
android:layout_height="50dip"
android:background="@drawable/facebook"
android:id="@+id/firsttime_fb"
/>
最终看起来像这样:
答案 0 :(得分:0)
在更改宽度和高度后,从setLayoutParams()
调用firsttimeFB
。
答案 1 :(得分:0)
尝试使用android:src并更改ScaleType,看看是否能让它更好地扩展。 此外,在通过调用getLayoutParams()设置宽度和高度之后,您应该调用请求布局,否则将不会显示更改。
如果要根据高度设置宽度,反之亦然,您应该创建自己的自定义ImageButton类,其中包含以下代码:
public class CustomImageButton extends ImageButton{
...
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int height = getMeasuredHeight();
float constant = 2.6666;
setMeasuredDimension(height * constant, height);
}
...
}
我想补充的是,我想知道你要做什么。我想不出一个我需要屏幕尺寸来阻止按钮大小的场景。尝试重新思考你的方法,并问问自己你所做的事情是否有意义。
答案 2 :(得分:0)
试试这个:
public void getScreenRes(){
DisplayMetrics display = this.getResources().getDisplayMetrics();
int width = display.widthPixels;
int height = display.heightPixels;
int buttonheight = display.heightPixels / 8;
double buttonwidth = buttonheight * 2.66666667;
int buttonwidthint = (int) Math.round(buttonwidth);
ImageButton firsttimeFB = (ImageButton) findViewById(R.id.firsttime_fb);
LayoutParams lp = firsttimeFB.getLayoutParams();
lp.width = buttonwidthint;
lp.height = buttonheight;
firsttimeFB.setLayoutParams(lp);
}