Android versteckt die Symbolleiste in einem bestimmten Fragment

Lesezeit: 5 Minuten

Benutzer-Avatar
smovie9

Ich habe ein Problem, von dem ich nicht weiß, wie ich es lösen soll. Wie versteckt man eine Symbolleiste in einem bestimmten Fragment, ich habe bereits im Internet gesucht und was ich gefunden habe, waren Kommunikationsaktivitäten und Fragmente würden es lösen. Aber es funktioniert bei mir überhaupt nicht, hier ist mein Code:

Hauptaktivität:

public class MainActivity extends ActionBarActivity implements like_frag.OnHideToolbar{

....

public void onHidingToolbar(int position){
        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        if(toolbar == null){
            getSupportActionBar().hide();
        }else{
            getSupportActionBar().hide();
        }
    }

like_frag.java

public class like_frag extends Fragment {

    OnHideToolbar mCallback;
    Toolbar toolbar;

    public interface OnHideToolbar {
        public void onHidingToolbar(int position);
    }

    public void onAttach(Activity activity){

        try{
            mCallback = (OnHideToolbar) activity;
        }catch(ClassCastException e){
            throw new ClassCastException(activity.toString() + "error implementing");
        }
    }
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View rootView = inflater.inflate(R.layout.swipefrag, container, false);

        toolbar = (Toolbar)getActivity().findViewById(R.id.toolbar);

        return rootView;
    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }
}

vielen Dank im Voraus.

Ich habe eine Schublade in der Symbolleiste.

  • stackoverflow.com/questions/21504088/…

    – Fahim

    18. März 2015 um 17:20 Uhr

  • habs schon probiert aber es geht nicht. Muss ich es in onCreate() oder onCreateView() des Fragments einfügen?

    – smovie9

    18. März 2015 um 17:27 Uhr

  • OnActivityCreated oder onCreateView

    – Fahim

    18. März 2015 um 17:45 Uhr

  • so in onCreate() oder onCreateView(): ((ActionBarActivity)getActivity).getSupportActionBar().hide();

    – smovie9

    18. März 2015 um 18:02 Uhr

  • geht nicht, hat jemand eine andere idee?

    – smovie9

    18. März 2015 um 19:51 Uhr

Fügen Sie diesen Code in das Fragment ein, in dem Sie die Symbolleiste ausblenden möchten …

 @Override
public void onResume() {
    super.onResume();
    ((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@Override
public void onStop() {
    super.onStop();
    ((AppCompatActivity)getActivity()).getSupportActionBar().show();
}

  • Es funktionierte perfekt. Ich habe viele Antworten in Stackoverflow ausprobiert. Aber nichts funktionierte. Du hast meinen Tag gerettet. Danke vielmals. Ich stimme auch zu, dies sollte die richtige Antwort sein.

    – Dinith Rukshan Kumara

    28. März 2018 um 10:01 Uhr

  • Das ist fantastisch. Habe versucht anzurufen setVisibility () darauf aus dem Fragment. .hide() und .show() funktionieren perfekt aus dem Fragment heraus.

    – Herr Drew

    11. September 2018 um 15:44 Uhr

  • Achten Sie bei der Verwendung auf das Flackerproblem! Ich verlor 2 Tage lang meinen Schlaf, indem ich meine Beschränkungslayouts und das untere Navigationssystem profilierte und nach Leistungsproblemen suchte.

    – nandu

    20. Mai 2020 um 18:50 Uhr

  • @nandu Wie hast du es gelöst? Derzeit mit den gleichen Problemen mit einem Constraint-Layout und einem unteren Navigationsbereich konfrontiert, wird es vor dem Zurücksetzen immer wieder in die Länge gezogen, was schrecklich aussieht.

    – Großer Stuhl

    25. September 2020 um 22:11 Uhr

  • @Big_Chair Ich glaube, ich habe es gelöst, indem ich es vollständig entfernt und bei Bedarf eingestellt habe (Aktivität als AppCompatActivity?)?.setSupportActionBar(appbar)

    – nandu

    27. September 2020 um 5:41 Uhr

Benutzer-Avatar
cinfwatd

In den Fragmenten onCreate Methodenaufruf:
((AppCompatActivity) getActivity()).getSupportActionBar().hide();

Ersetzen AppCompateActivity mit der von Ihnen verwendeten Aktivitätsklasse.

Bearbeitet:

Du könntest einfach die verwenden onResume Methode zum Aufrufen hide() und die onStop Methode zum Aufrufen show() wie in einigen Kommentaren vorgeschlagen.

@Override
public void onResume() {
    super.onResume();
    ((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}

@Override
public void onStop() {
    super.onStop();
    ((AppCompatActivity)getActivity()).getSupportActionBar().show();
}

  • Dadurch wird die Symbolleiste nicht erneut angezeigt, wenn Sie dieses Fragment verlassen.

    – Borja

    9. Januar 2017 um 14:26 Uhr

  • Sie müssen es anzeigen: getYourActivity().getSupportActionBar().show();

    – ODAXY

    19. November 2019 um 8:42 Uhr


  • Wie @ODAXY sagte, müssen Sie getYourActivity().getSupportActionBar().show(); auf der Methode onDestroy() des Fragments. Damit wird das restliche Anwendungsverhalten zurückgesetzt.

    – Xenon Kfr

    15. Januar 2020 um 13:08 Uhr


Benutzer-Avatar
Sanjeev

Wenn Sie die neue verwenden Navigation Componentfügen Sie dies hinzu, während Sie die Symbolleiste einrichten

navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
   @Override
   public void onDestinationChanged(@NonNull NavController controller,
           @NonNull NavDestination destination, @Nullable Bundle arguments) {
       if(destination.getId() == R.id.full_screen_destination) {
           toolbar.setVisibility(View.GONE);
           bottomNavigationView.setVisibility(View.GONE);
       } else {
           toolbar.setVisibility(View.VISIBLE);
           bottomNavigationView.setVisibility(View.VISIBLE);
       }
   }
});

Und für Kotlin können Sie Folgendes tun:

navController.addOnDestinationChangedListener { _, destination, _ ->
    if(destination.getId() == R.id.full_screen_destination) {
        toolbar.setVisibility(View.GONE)
        bottomNavigationView.setVisibility(View.GONE);
    } else {
        toolbar.setVisibility(View.VISIBLE)
        bottomNavigationView.setVisibility(View.VISIBLE);
    }
}

  • Hier ist das Android offizielles Dokument erklären addOnDestinationChangedListener

    – Sanjeev

    23. Januar 2020 um 10:16 Uhr


  • Es ist auch erwähnenswert für Anfänger, dass Sie die Aktionsleiste entfernen, bevor Sie die Symbolleiste hinzufügen

    – Rubek Joshi

    3. April 2020 um 20:31 Uhr

  • Hey. Das ist wirklich eine gute Lösung. Weil ich die Aktionsleiste und die Nottom-Navigationsansicht auf einigen untergeordneten Fragmenten ausblenden muss

    – Andrea Liureta

    29. November 2021 um 16:37 Uhr

Benutzer-Avatar
Chris Read

Erstellen Sie eine Schnittstelle im Fragment und verwenden Sie sie, um die übergeordnete Aktivität anzuweisen, die Symbolleiste auszublenden.

Fügen Sie Ihrem Fragment diese Zeilen hinzu:

private OnEventListener listener;

public interface OnEventListener {

    void hideToolbar() ;
}

public void setOnEventListener(OnEventListener listener) {

    this.listener = listener;
}

Nachdem Sie Ihr Fragment in der Hauptaktivität erstellt haben, fügen Sie Folgendes hinzu:

    myFragment.setOnEventListener(new MyFragment.OnEventListener() {
        @Override
        public void hideToolbar() {

            getSupportActionBar().hide();
        }
    });

Wann immer Sie die Symbolleiste ausblenden müssen, führen Sie Folgendes aus:

listener.hideToolbar();

aus Ihrem Fragment.

Fügen Sie diese Methoden einfach dem Fragment hinzu, in dem Sie die Symbolleiste deaktivieren möchten, und auch in den Fragmenten onStop() wieder sichtbar machen.

 @Override
    public void onResume() {
        super.onResume();
        ((AppCompatActivity)getActivity()).getSupportActionBar().hide();
    }

    @Override
    public void onStop() {
        super.onStop();
        ((AppCompatActivity)getActivity()).getSupportActionBar().show();
    }

Benutzer-Avatar
cs95

in kotlin verstecken und zeigen supportActionBar folgendermaßen:

override fun onResume() {
    super.onResume()
    (activity as AppCompatActivity).supportActionBar?.hide()
}

override fun onStop() {
    super.onStop()
    (activity as AppCompatActivity).supportActionBar?.show()
}

und wenn Sie Ihre eigene benutzerdefinierte Symbolleiste haben möchten, in OncreateView einstellen:

//your Custom toolbar in xml
val toolbar = binding.toolbar
(activity as AppCompatActivity).setSupportActionBar(toolbar)

Benutzer-Avatar
avisper

Einfach verwenden supportActionBar?.hide() oder supportActionBar?.show(). Wenn Sie NavigationController verwenden:

 navController.addOnDestinationChangedListener { controller, destination, arguments ->
        if (destination.id == R.id.loginSuccessFragment) {
            supportActionBar?.hide()
        } else {
            supportActionBar?.show()
        }
    }

  • Stellen Sie sicher, dass Sie dies anrufen onPostCreate(savedInstanceState: Bundle?) und nicht onCreate oder onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?)

    – Viktor Ude

    9. Januar 2021 um 18:49 Uhr

  • Dadurch wird die Aktionsleiste ausgeblendet, aber wenn Sie zu anderen Bildschirmen zurückkehren, werden die Layouts jetzt hinter der Aktionsleiste nach oben verschoben positioniert.

    – Gary Frewin

    9. April 2021 um 20:48 Uhr

1093700cookie-checkAndroid versteckt die Symbolleiste in einem bestimmten Fragment

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy