Jelly Bean Android.r.id.Content изменился?
-
11-12-2019 - |
Вопрос
Я недавно проверил свое приложение на устройстве для желейных бобов и заметил, что мой код уклонения веществ больше не работает.
У меня есть прозрачный эффект Actionbar с OverlayMode True, но хочу вести себя эффект, как твердый эффект, в некоторых экранах.
Чтобы сделать эту работу, я одолжил какой-то код из сотовой галереи
В основном я проверяю высоту ационабара и установите Topmargin android.r.id.Content Bucket на это значение.
public void setupActionbar() {
final int sdkVersion = Build.VERSION.SDK_INT;
int barHeight = getSupportActionBar().getHeight();
if (sdkVersion < Build.VERSION_CODES.HONEYCOMB) {
FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) content.getLayoutParams();
if (params.topMargin != barHeight) {
params.topMargin = barHeight;
content.setLayoutParams(params);
}
if (!getSupportActionBar().isShowing()) {
params.topMargin = 0;
content.setLayoutParams(params);
}
} else {
FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
LayoutParams params = content.getLayoutParams();
if (params instanceof RelativeLayout.LayoutParams) {
android.widget.RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) params;
if (lp.topMargin != barHeight) {
lp.topMargin = barHeight;
content.setLayoutParams(lp);
}
if (!getActionBar().isShowing()) {
lp.topMargin = 0;
content.setLayoutParams(lp);
}
} else if (params instanceof FrameLayout.LayoutParams) {
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) params;
if (lp.topMargin != barHeight) {
lp.topMargin = barHeight;
content.setLayoutParams(params);
}
if (!getActionBar().isShowing()) {
lp.topMargin = 0;
content.setLayoutParams(params);
}
}
}
.
в Jelly Beans Эта стратегия больше не работает по какой-то причине.Сделал желеную фасоль изменить удостоверение личности id.content контейнер Perhabs?
Решение
Хорошо, отвечая на мой вопрос здесь. Сначала у меня была опечатка в моем коде:
content.setLayoutParams(params); should read
content.setLayoutParams(lp);
.
Но реальная проблема заключалась в том, что
FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
.
Укажите вид на весь экран, включая Statusbar . только на Android 4.1 Jelly Bean
.
View content = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
дает RootContentView, который необходимо нажать под прозрачным действием.