CollapsingToolbarLayout setTitle () wird nicht aktualisiert, wenn nicht zusammengebrochen

Mit der neuen Designbibliothek sollen wir den Toolbar-Titel auf der CollapsingToolbarLayout , nicht die Toolbar selbst (zumindest bei Verwendung der kollabierenden Symbolleiste). Aber setTitle() aktualisiert nur den Titel unter folgenden Umständen:

1) Wenn der CollapsingToolbarLayout noch keinen Titel hat

  • ByteBuffer Little Endian Insert funktioniert nicht
  • Wie kann ich eine Android App ohne Android Studio machen?
  • OnClick nicht auf LinearLayout mit Kind ausgelöst
  • So entfernen Sie App installiert vertrauenswürdigen CA Cert bei der Deinstallation der App
  • Wie man das Optionsfeld für die Listenpräferenz anpasst
  • Was bedeutet dieses Android Lint Mean: "Falsche Orientierung?"
  • 2) Im Moment wird das CollapsingToolbarLayout vollkommen zusammengebrochen

    3) Im Moment beginnt die CollapsingToolbarLayout zu erweitern

    Was ich eigentlich versuche zu tun ist, macht den Titel zu einem EditText wenn er vollständig erweitert wird, so dass der Benutzer seinem / ihrem Charakter einen Namen geben kann, der dann als Titel erscheint. Ich habe versucht, das Problem zu erzwingen, indem ich invalidate() oder requestLayout() , sowie beide dieser Methoden auf CollapsingToolbarLayout Kinder requestLayout() . Kein Effekt.

    Irgendwelche Ideen?

  • Wie kann ich eine Anwendung aus dem Widget in Android öffnen?
  • Ausführung fehlgeschlagen für Task ': app: dexDebug' Android Studio
  • Android, die Einrichtung einer Linux-Build-Umgebung, libgl1-mesa-glx: i386-Paket haben keine Abhängigkeiten
  • Bildschirm blinkt bei Verwendung eines Webview mit Flash
  • Erstellen Sie eine Live-Streaming-APP für Android
  • IOS AppDelegate-Äquivalent in Android
  • 3 Solutions collect form web for “CollapsingToolbarLayout setTitle () wird nicht aktualisiert, wenn nicht zusammengebrochen”

    EDIT: Diese Lösung wird nicht mehr benötigt. Fehler in v22.2.1 behoben

    Ich wollte nicht, um Links zu verlassen, also hier ist die volle Lösung.

    Der Fehler tritt auf, weil der Code, der den zusammenklappbaren Titel verarbeitet, nur den tatsächlichen Titel aktualisiert, wenn der aktuelle Titel null ist oder sich die Textgröße geändert hat. Der Workaround ist, die Titeltextgröße zu ändern und sie dann wieder zu ändern. Ich habe 0,5 Sp so dass es nicht zu viel von einem Sprung. Das Ändern der Textgröße zwingt den zu aktualisierenden Text und es gibt kein Flimmern. Nur eine leichte Textgröße ändern.

    Das habe ich

     private void setCollapsingToolbarLayoutTitle(String title) { mCollapsingToolbarLayout.setTitle(title); mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBar); mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar); mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBarPlus1); mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBarPlus1); } 

    In styles.xml habe ich

     <style name="ExpandedAppBar" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">28sp</item> <item name="android:textColor">#000</item> <item name="android:textStyle">bold</item> </style> <style name="CollapsedAppBar" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">24sp</item> <item name="android:textColor">@color/white</item> <item name="android:textStyle">normal</item> </style> <style name="ExpandedAppBarPlus1" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">28.5sp</item> <item name="android:textColor">#000</item> <item name="android:textStyle">bold</item> </style> <style name="CollapsedAppBarPlus1" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">24.5sp</item> <item name="android:textColor">@color/white</item> <item name="android:textStyle">normal</item> </style> 

    Glückliche Codierung.

    Okay, ich habe einen Workaround, während wir auf Google warten:

    1. Grab the gist von https://gist.githubusercontent.com/blipinsk/3f8fb37209de6d3eea99/raw/b13bd20ebb319d94399f0e2a0bedbff4c044356a/ControllableAppBarLayout.java (Ich bin nicht der ursprüngliche Schöpfer aber Kudos zum ursprünglichen Autor). Dies fügt dem AppBarLayout ein paar Methoden AppBarLayout , nämlich zu erweitern und zu kollabieren

    2. In deiner Methode, die setTitle() :

     collapsingToolbar.setTitle("All Recent"); getSupportActionBar().setTitle("All Recent"); collapseThenExpand(); 
    1. Erstellen Sie nun eine collapseThenExpand() Methode:
     private void collapseThenExpand() { appbar.collapseToolbar(); Handler h = new Handler(); h.postDelayed(new Runnable() { @Override public void run() { appbar.expandToolbar(true); } }, 800); } 

    Beachten Sie, dass Sie die Erweiterungsanimation deaktivieren können, indem Sie sie auf false setzen.

    In meiner Lösung musste ich den Titel sowohl für die Symbolleiste als auch für die zusammenbrechende Symbolleiste setzen, damit sie arbeiten kann.

    Also in OnCreate:

      toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); 

    Und dann weiter unten, wenn ich Fragmente umschalte, setze ich den Titel für beide, wenn ein Tab ausgewählt ist:

      public boolean onNavigationItemSelected(@NonNull MenuItem item) { FragmentManager fm = getSupportFragmentManager(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); //TAB1 - THE DEFAULT TAB switch (item.getItemId()) { case R.id.tab_rooms: toolbar.setTitle("My Title"); collapsingToolbar.setTitle("My Title"); fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); fragment = new RoomsFragment(); transaction.replace(R.id.fragment_container, fragment); transaction.addToBackStack(null); transaction.commit(); return true; case R.id.tab_shisha: toolbar.setTitle("My Title2"); collapsingToolbar.setTitle("My Title2"); fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); fragment = new ShishaFragment(); transaction.replace(R.id.fragment_container, fragment); transaction.addToBackStack(null); transaction.commit(); return true; } return false; } 

    Hoffe, das hilft jemand!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.