Ich entwickle gerade eine Anwendung, in der ich einen stark modifizierten Split Action Bar benutze. Hier ist ein Link zu der aktuellen Status der App:AppCompat v7: 21 geteilte Aktionsleiste defekt?
Sie erhalten eine transparente Aktionsleiste oben bemerkt, mit einer benutzerdefinierten Ansicht in sie aufgeblasen ist, mit einer zusammengehackt geteilt Aktionsleiste auf der Unterseite. Die Ansicht von unten ist eigentlich ein einzelnes Aktionselement mit einer benutzerdefinierten Ansicht, die darin aufgebläht ist, und showAlways = true.
Derzeit unterstützen I SDK v15 + nur und ich plane nicht wirklich auf zu ändern, dass, aber mit dem Lollipop AppCompat Bibliothek, die gerade veröffentlicht, habe ich beschlossen, es zu implementieren, so konnte ich einige dieser awesomeness in meiner App bekommen.
Ich habe mein Thema in Theme.AppCompat.Light geändert, und meine MainActivity erweitert jetzt ActionBarActivity anstelle von Activity.
Alle Verweise auf getActionBar haben jetzt getSupportActionBar, und nur mit den Änderungen eingeschaltet worden ist, ist es das, was jetzt meine Tätigkeit wie folgt aussieht:
Sie werden bemerken, die ich von der einen UI-Dump bekam Gerätemonitor, und es verschiebt die untere Aktionsleiste in ein seltsames Feld und ruft die Aktionsleiste auf und entfernt meine oberste benutzerdefinierte Ansicht.
Hier ist mein Code für die Einstellung meiner Aktionsleiste oben:
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() von onCreate in meiner Tätigkeit genannt wird. Irgendwelche Ideen, was ich falsch mache?
Sie können eine benutzerdefinierte Symbolleiste erstellen und sie einmal oben, einmal darunter platzieren. Bitte überprüfen Sie diesen Beitrag: http://StackOverflow.com/Questions/34546160/How-to-enable-split-action-bar/34546493#34546493 – piotrek1543