android:layout_marginTop="?attr/actionBarSize"
这将自动考虑基于屏幕配置的大小更改。您可以在随ActionBarSherlock一起提供的“Demos”示例中的“Overlay”示例中查看其使用演示。
Jake Wharton的答案在处理配置更改时无法正常工作。
以下是我通过代码解决此问题的方法,希望能对大家有所帮助:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
layoutTheView();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
layoutTheView();
}
private void layoutTheView() {
ActionBar actionBar = this.getSupportActionBar();
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mTheView.getLayoutParams();
int actionBarHeight = actionBar.getHeight();
params.setMargins(0, actionBarHeight, 0, 0);
mTheView.setLayoutParams(params);
mTheView.requestLayout();
}
params.topMargin = actionBarHeight;
替换params.setMargins(0, actionBarHeight, 0, 0);
则不行。(4.2.1)另外,setLayoutParams
调用了requestLayout
,所以不需要最后一行代码。 - dokkaebi使用上内边距
android:paddingTop="50dp"
?android:attr/actionBarSize
。 - Jake Wharton