我需要在运行时向我的应用程序添加一个按钮,但我想根据方向设置不同的布局。对于纵向我希望宽度为wrap_content
,但在横向我需要设置一个固定宽度。我知道如何单独执行这些操作,但我找不到任何方法让它们以与在 XML 布局文件中处理它的方式相同的方式工作。可能吗?
问问题
45 次
2 回答
0
您首先需要一个 Display 实例:
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
然后方向可以这样调用:
int orientation = display.getOrientation();
然后你可以创建一个不同的布局,
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
switch(orientation) {
case Configuration.ORIENTATION_PORTRAIT:
// ToDo layout for portrait
break;
case Configuration.ORIENTATION_LANDSCAPE:
// ToDo layout for landscape
break;
}
}
如果要在运行时设置方向,请使用,
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT | ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
创建一个布局,如
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(android.widget.LinearLayout.VERTICAL);
ll.setLayoutParams(new ViewGroup.LayoutParams(-1,-1));
// ARGB: Opaque Red
ll.setBackgroundColor(0x88ff0000);
TextView tv = new TextView(this);
tv.setLayoutParams(new ViewGroup.LayoutParams(-1,-2));
tv.setText("sample text goes here");
// ARGB: Opaque Green
tv.setBackgroundColor(0x5500ff00);
ll.addView(tv);
EditText et = new EditText(this);
et.setLayoutParams(new ViewGroup.LayoutParams(-1,-2));
et.setText("edit me please");
// ARGB: Solid Blue
et.setBackgroundColor(0xff0000ff);
ll.addView(et);
Button btn = new Button(this);
btn.setText("Go!");
btn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
tv.setText(et.getText().toString());
}
});
ll.addView(btn);
setContentView(ll);
于 2013-07-08T10:55:31.323 回答
0
于 2013-07-08T10:48:15.120 回答