Попытка использовать BottomNavigation, но ее положение не учитывает высоту AppBar, поэтому она не видна

avatar
K. Rupert
1 июля 2021 в 17:25
45
1
-1

Я добавил в представление BottomNavigation с парой кнопок. Однако, когда я запускаю свое приложение, отображается только самая верхняя часть панели навигации. Когда я делаю окно длиннее, я вижу всю полосу. Когда я устанавливаю видимость AppBar на «false», панель навигации отображается красиво. Как правильно отображать BottomNavigation? Добавляю ли я объект BottomNavigation в правый вид?

Это большая часть моего класса:

    public void initialize() {
        primary.showingProperty().addListener((obs, oldValue, newValue) -> {
            if (newValue) {
                AppBar appBar = getApp().getAppBar();
                appBar.setNavIcon(MaterialDesignIcon.MENU.button(e ->
                        getApp().getDrawer().open()));
                appBar.setTitleText("Gluon App");
            }
        });

        primary.setBottom(createBottomNaviagtion());
    }

    public BottomNavigation createBottomNaviagtion(){
        BottomNavigation bottomNavigation = new BottomNavigation();
        //.. creating BottomNavigationButtons

        bottomNavigation.getActionItems().addAll(/*Buttons here*/);
        return bottomNavigation;
    }

Я понял, что GlassPane содержит AppBar и View, и так же, как я добавлял BottomNavigation в View, я также мог добавить AppBar в View. Когда AppBar GlassPane становится невидимым, это приводит к тому, что я хотел: и AppBar, и BottomNavigation хорошо отображаются. Мне все еще интересно, правильный ли это подход, буду признателен за любой отзыв!

Источник

Ответы (1)

avatar
Javateer
4 августа 2021 в 16:02
0

Кажется, приложение поставляется с AppBar по умолчанию. Несмотря на то, что я не добавлял его с помощью SceneBuilder в свой файл FXML, он доступен. Чтобы увидеть в SceneBuilder реальную компоновку всех виджетов, как она будет отображаться во время выполнения, я явно добавил AppBar в SceneBuilder. Но затем, когда я запускаю приложение, я получаю две панели приложений; один поверх другого.

Мое исправление заключалось в том, чтобы скрыть вариант по умолчанию и показать тот, который, как я вижу, занимает место в визуальном пользовательском интерфейсе SceneBuilder.

@FXML private View view;

@FXML private AppBar appBar; //named in the associated FXML

public void initialize() {

    view.getApplication().getAppBar().setVisible(false);
    appBar.setNavIcon(MaterialDesignIcon.MENU.button(e -> getApp().getDrawer().open()));
}

Теперь, когда я добавляю элемент управления BottomNavigation и другие виджеты, все они отображаются во время выполнения точно так же, как это было показано мне в SceneBuilder во время разработки пользовательского интерфейса.