Jelly haricot android.r.id.content a changé?
-
11-12-2019 - |
Question
J'ai récemment testé mon application sur un appareil de haricot de gelée et remarqua que mon code d'introduction de la barre d'action ne fonctionne plus.
J'ai une barre d'action transparente avec supermode TRUE, mais souhaitez vous comporter de la barre d'action comme une barre d'action solide dans certains de mes écrans.
Pour faire ce travail, j'ai emprunté du code de la galerie d'abeilles code
fondamentalement, je vérifie la hauteur de l'acionbar et définissez le godet TopMargin du godet Android.R.ID.Content sur cette valeur.
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);
}
}
}
dans les haricots de la gelée Cette stratégie ne fonctionne plus pour une raison quelconque.Jelly Bean a-t-il changé le conteneur ID.Content perhabs?
La solution
OK répondant à ma propre question ici. J'ai d'abord eu une faute de frappe dans mon code:
content.setLayoutParams(params); should read
content.setLayoutParams(lp);
Mais le vrai problème était que
FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
fournir la vue de l'écran entier, y compris la barre d'état View content = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
donne la RootContentView qui doit être poussée sous la barre d'action transparente.