布局在Android中调用setOrientation时不更新

时间:2015-11-15 01:57:41

标签: android layout

我将片段从一个视图切换到下一个视图然后切换方向。视图不会更新到新的方向。

fm.beginTransaction()
    .remove(mCallBellsFragment)
    .commit();

fm.executePendingTransactions();

fm.beginTransaction()
        .replace(R.id.bed_mode_plan_of_care_fragment_container, mCallBellsFragment)
        .commit();

mCallBellsFragment.toggleOrientation(LinearLayout.HORIZONTAL);

...

public void toggleOrientation(int requestedOrientation) {
    Log.d("AFL", "Current Orientation: " + (LinearLayout.HORIZONTAL == requestedOrientation ? "Horizontal" : "VERTICAL"));
    mCallButtonLayout.setOrientation(requestedOrientation);
    Log.d("AFL", "Set Orientation: " + (mCallButtonLayout.getOrientation() == LinearLayout.HORIZONTAL ? "HORIZONTAL" : "VERTICAL"));
}

日志:

D / AFL:当前方向:水平

D / AFL:设置方向:HORIZONTAL

然而,方向在屏幕上保持垂直。

2 个答案:

答案 0 :(得分:0)

需要重新绘制布局以便以不同方式显示。

尝试在重置方向后调用invalidate()。

mCallButtonLayout.invalidate()

答案 1 :(得分:0)

按照@Eric Liu的建议尝试invalidate()方法,但首先尝试通过调用requestFocus()来关注所述视图。

如果这不起作用。尝试invalidate()布局的根视图。 此外,这可能会有所帮助,使用以下命令在UI线程上运行所有内容:

runOnUiThread(new Runnable() {
    @Override 
    public void run() { 
        //Call methods here 
    } 
});