我需要在运行时向我的应用添加一个按钮,但我想根据方向设置不同的布局。对于肖像我希望宽度为wrap_content
,但在横向中我需要设置固定宽度。我知道如何单独完成这些操作,但是我找不到任何方法让两者都以我在XML布局文件中处理它的方式工作。有可能吗?
答案 0 :(得分:0)
答案 1 :(得分: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);