我们正在开发Android应用程序,我们希望在显示View时重新启动我们的UI。 因为我们无法计算XML文件中按钮的高度,所以我们要计算它并显示它抛出我们的Java代码。 但是当我们从onCreate中调用它时,我们的方法fit()不起作用,而当我们从Action溢出调用它时它可以工作。 我们在Android模拟器和三星Galaxy SIII上尝试了这个代码。 有人可以帮助我们吗? 谢谢Fotoschnitzel
以下是代码:
public class Game extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.classic);
fit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.potz1000, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
fit();
default:
return super.onOptionsItemSelected(item);
}
}
public void fit() {
Button Button1=(Button)findViewById(R.id.grid1);
Button Button2=(Button)findViewById(R.id.grid2);
Button Button3=(Button)findViewById(R.id.grid3);
Button Button4=(Button)findViewById(R.id.grid4);
Button Button5=(Button)findViewById(R.id.grid5);
Button Button6=(Button)findViewById(R.id.grid6);
Button Button7=(Button)findViewById(R.id.grid7);
Button Button8=(Button)findViewById(R.id.grid8);
Button Button9=(Button)findViewById(R.id.grid9);
LinearLayout Lin1=(LinearLayout)findViewById(R.id.lin1);
LinearLayout Lin2=(LinearLayout)findViewById(R.id.lin2);
LinearLayout Lin3=(LinearLayout)findViewById(R.id.lin3);
LinearLayout Global=(LinearLayout)findViewById(R.id.LinearLayout1);
LinearLayout Up=(LinearLayout)findViewById(R.id.bestfiller);
ProgressBar Bar=(ProgressBar)findViewById(R.id.progressBar1);
int x = Button1.getWidth();
int y = Global.getHeight();
int z = Bar.getHeight();
int Filler=y-3*x-z;
if (Filler > 50){
Up.setLayoutParams(new LinearLayout.LayoutParams(3*x, Filler));
Lin1.setLayoutParams(new LinearLayout.LayoutParams(3*x, x));
Lin2.setLayoutParams(new LinearLayout.LayoutParams(3*x, x));
Lin3.setLayoutParams(new LinearLayout.LayoutParams(3*x, x));}
double size= x*0.4;
Button1.setTextSize((float)size);
Button2.setTextSize((float)size);
Button3.setTextSize((float)size);
Button4.setTextSize((float)size);
Button5.setTextSize((float)size);
Button6.setTextSize((float)size);
Button7.setTextSize((float)size);
Button8.setTextSize((float)size);
Button9.setTextSize((float)size);
}
}
答案 0 :(得分:0)
我可以向您保证,在应用程序启动时也会调用该方法。你的问题是另一回事。您正在检查Filler
条件,但刚刚在setContentView
int x = Button1.getWidth();
int y = Global.getHeight();
int z = Bar.getHeight();
x
,y
和z
为0,使if条件为false
答案 1 :(得分:0)
视图层次结构尚未测量和布局,因此getWidth()
和getHeight()
将返回0.
您可以在测量/布局传递后将Runnable
发布到调用fit()
方法的UI线程消息队列。见How to retrieve the dimensions of a view?
答案 2 :(得分:0)
rootView.getViewTreeObserver().addOnGlovalLayoutListener( new OnGlobalLayoutListener() {
public void onGlobalLayout() {
//all views are measured now and getWidth() and getHeight() will return correct values
//don't forget to unregister the listener for future layout events
rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});