以编程方式为不同方向添加具有不同属性的按钮

时间:2013-07-08 10:44:34

标签: android orientation screen-orientation android-button

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

2 个答案:

答案 0 :(得分:0)

我会检查手机方向

getResources().getConfiguration().orientation

并在参考

中动态添加按钮

Dev

答案 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);