AppCompat v7: 21 Split Action Bar Broken?

Je développe actuellement une application dans laquelle j'utilise une barre d'action Split fortement modifiée. Voici un lien vers l'état actuel de l'application:

capture d'écran

  • Erreur d'infiltration de Fragment dans Dialog la deuxième fois
  • Appeler stopSelf () en service pendant que le thread est en cours d'exécution
  • Création d'un fichier apk de débogage à l'aide de gradle sur erreur de serveur sans tête
  • Arrêt d'une application Android depuis la console
  • L'onglet ne prend pas la largeur totale sur l'appareil Tablette
  • Utilisation de ZXing pour créer une application de balayage de codes à barres Android
  • Vous remarquerez une barre d'action transparente en haut, avec une vue personnalisée gonflée, une barre d'action divisée piratée en bas. La vue de bas est en fait un élément d'action unique avec une vue personnalisée gonflée dans elle et showAlways = true.

    Actuellement, je ne supporte que le SDK v15 + et je n'ai pas vraiment l'intention de changer cela, mais avec la librairie Lollipop AppCompat qui vient de sortir, j'ai décidé de l'implémenter, afin que je puisse avoir un peu de cette impression dans mon application.

    J'ai changé ma thème sur Theme.AppCompat.Light, et ma MainActivity étend maintenant ActionBarActivity au lieu d'Activity.

    Toutes les références à getActionBar ont maintenant été transférées vers getSupportActionBar, et avec ces changements, c'est à quoi ressemble cette activité:

    Une autre capture d'écran

    Vous remarquerez que j'ai eu un vidage UI à partir du moniteur de périphérique, et il enfonce la barre d'action inférieure dans un espace étrange et en appelle la barre d'action et je me débarrasse de ma vue personnalisée supérieure.

    Voici mon code pour configurer ma barre d'action:

    public void initializeActionBar(){ View customNav = LayoutInflater.from(this).inflate(R.layout.action_bar_top, null); actionBar = getSupportActionBar(); actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.transparent_fifty_percent)); final PopupWindow window = addPopupWindow(); actionBarOptions = (ImageView)customNav.findViewById(R.id.options); actionBarOptions.setVisibility(View.GONE); actionBarOptions.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.vertical_ellipsis, app.scaleByDensity(48))); actionBarOptions.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { window.showAsDropDown(actionBarOptions, 0, 0); } }); TextView title = (TextView) customNav.findViewById(R.id.screen_title); Typeface font1 = Typeface.createFromAsset(getAssets(), "Merriweather-Italic.ttf"); title.setText("Parsley"); title.setTypeface(font1); actionBar.setCustomView(customNav); actionBar.setDisplayShowCustomEnabled(true); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayUseLogoEnabled(false); } @Override public boolean onCreateOptionsMenu(Menu menu) { new MenuInflater(this).inflate(R.menu.test, menu); LinearLayout fullMenu = (LinearLayout) menu.findItem(R.id.full_menu).getActionView(); ViewGroup.LayoutParams params; icon1 = (ImageView) fullMenu.findViewById(R.id.action_item1); params = icon1.getLayoutParams(); params.width = getResources().getDisplayMetrics().widthPixels / 4; params.height = (int) (48 * getResources().getDisplayMetrics().density); icon1.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.shopping_list_icon, app.scaleByDensity(32))); icon2 = (ImageView) fullMenu.findViewById(R.id.action_item2); icon3 = (ImageView) fullMenu.findViewById(R.id.action_item3); icon4 = (ImageView) fullMenu.findViewById(R.id.action_item4); icon2.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.recipe_box_icon, app.scaleByDensity(32))); icon3.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.icon_search, app.scaleByDensity(32))); icon4.setImageDrawable(app.svgToBitmapDrawable(getResources(), R.raw.icon_add, app.scaleByDensity(32))); params = icon2.getLayoutParams(); params.width = getResources().getDisplayMetrics().widthPixels / 4; params.height = (int) (48 * getResources().getDisplayMetrics().density); params = icon3.getLayoutParams(); params.width = getResources().getDisplayMetrics().widthPixels / 4; params.height = (int) (48 * getResources().getDisplayMetrics().density); params = icon4.getLayoutParams(); params.width = getResources().getDisplayMetrics().widthPixels / 4; params.height = (int) (48 * getResources().getDisplayMetrics().density); if (!firstLoad) { setBottomActionBarActive(); setActiveTab(0); } optionsLoaded = true; return true; } 

    InitializeActionBar () est appelé à partir de onCreate dans mon activité. Des idées sur ce que je fais mal?

  • Comment savoir quelle activité est au dessus de la pile à l'aide de Robotium / Android SDK?
  • Gradle version 2.10 est requis. La version actuelle est 2.8 Erreur
  • Le cadre Annotations Android ne semble pas générer quoi que ce soit
  • IntelliJ / Android Studio: supprimez l'utilisation inutile de ceci.
  • Comment obtenir des clics de bouton dans le fragment d'hôte à partir du fragment de dialogue
  • ButtonStyle ne fonctionne pas pour 22.1.1
  • 3 Solutions collect form web for “AppCompat v7: 21 Split Action Bar Broken?”

    La barre d'outils doit être utilisée. Dans votre cas, il y a une barre d'outils en haut et une en bas. Vérifiez le blog de l'équipe Android, ils ont un bon guide d'intégration.

    Si vous souhaitez juste revenir à votre barre d'action inférieure, vous pouvez simplement revenir à appcompat v7: 20, et cela fonctionne pour moi. Le problème est que la barre d'action partagée n'est plus prise en charge dans appcomat v7: 21.

    Bien que la solution de l'utilisateur482277 puisse fonctionner pour les cas avec une barre d'action fractionnée plus traditionnelle, en utilisant des éléments d'action, un tiroir de navigation, etc., cela ne fonctionnait pas vraiment pour moi. Ce que j'ai fini de faire était de créer une paire de vues personnalisées (composé vraiment) pour imiter la barre d'action supérieure et inférieure. J'ai trouvé cette situation beaucoup mieux, surtout avec une compatibilité ascendante. Je n'ai pas à m'inquiéter des versions antérieures supportant la barre d'action, car en fin de journée, ce n'est qu'une paire de cours qui étendent LinearLayout. En outre, je ne dois pas me soucier de différentes tailles d'écran (en particulier les tablettes) ne supportant pas la version partagée.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.