Ich versuche, Funktionen aus der neuen Design Support Library zu implementieren, um eine Parallax-Scrolling-Symbolleiste zu erstellen, die den neuen WhatsApp-Profilseiten des Materialdesigns ähnelt. Ich kann jedoch das Überlaufmenü und die Zurück-Schaltfläche nicht in den oberen Ecken anzeigen.
Ich habe mit den folgenden Methoden versucht, die Zurück-Schaltfläche anzuzeigen, aber keine davon funktioniert.
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
Das Überschreiben der Methode onCreateOptionsMenu für das Überlaufmenü funktionierte ebenfalls nicht.
Weiß jemand, wie diese Symbolleistensymbole einer CollapsingToolbar aus der Design Support Library hinzugefügt werden? Unten ist mein Layout-XML für die Aktivität. Vielen Dank!
<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/main_content"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appbar"
Android:layout_width="match_parent"
Android:layout_height="256dp"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
Android:fitsSystemWindows="true">
<Android.support.design.widget.CollapsingToolbarLayout
Android:id="@+id/collapsing_toolbar"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
Android:fitsSystemWindows="true"
app:contentScrim="@color/primary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp">
<ImageView
Android:id="@+id/backdrop"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:src="@drawable/headerbg"
Android:scaleType="centerCrop"
Android:fitsSystemWindows="true"
app:layout_collapseMode="parallax" />
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/Theme.AppCompat.Light.DarkActionBar"
app:layout_collapseMode="pin" />
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="fill_vertical"
Android:layout_marginBottom="?attr/actionBarSize"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</Android.support.v4.widget.NestedScrollView>
Ich hatte das gleiche Problem, keine aus vorhandenen Antworten hat mir geholfen, überraschende Lösung für mein Problem war die Beschreibung der Frage.
Um die Minimiersymbolleiste mit der Zurück-Schaltfläche arbeiten zu können, müssen diese wenigen Zeilen in der Controller-Methode onCreate
verwendet werden:
//change id to Your id
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//this line shows back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Manifest dieser Aktivität (Notice parentActivityName -Attribut):
<activity
Android:name=".SomeActivity"
Android:parentActivityName=".MainActivity"
Android:theme="@style/AppTheme.NoActionBar"/>
Vorlagenteil:
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:fitsSystemWindows="true"
Android:theme="@style/AppTheme.AppBarOverlay">
<Android.support.design.widget.CollapsingToolbarLayout
Android:id="@+id/collapsing_toolbar"
Android:layout_width="match_parent"
Android:layout_height="200dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:contentScrim="@color/colorPrimary"
Android:fitsSystemWindows="true"
app:expandedTitleGravity="center_horizontal"
>
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="@Android:color/transparent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin"
/>
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
Controller onCreate
Methode:
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(Android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
Dieser Ansatz verwendet dasselbe Manifest und dieselbe Vorlage wie in der ersten Lösung.
Versuchen Sie, dies nicht in das CoordinatorLayout zu übernehmen:
Android:fitsSystemWindows="true"
Für mich geht das. Keine Ahnung warum. Viel Glück
In meinem Fall funktioniert das! app:layout_collapseMode="pin"
im Symbolleistenlayout
Die folgende Schaltfläche aktiviert die Navigationsschaltfläche:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp, null));
toolbar.setNavigationOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//onBackPressed()
}
});
Um das Überlaufmenü-Verhalten zu erhalten, müssen Sie eine menu.xml-Datei mit showAsAction deklarieren.
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<item Android:id="@+id/action_one"
Android:title="action 1"
Android:orderInCategory="1"
app:showAsAction="never"/>
<item Android:id="@+id/action_two"
Android:title="action 2"
Android:orderInCategory="2"
app:showAsAction="never"/>
</menu>
Und aufblasen wie:
toolbar.inflateMenu(R.menu.main);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_one:
break;
case R.id.action_two:
break;
}
return true;
}
});
Wenn Sie dem Tag parentActivityName kein Tag in der Manifestdatei hinzugefügt haben, fügen Sie die folgenden Codezeilen hinzu
<activity Android:name=".Activity.MovieData"
Android:parentActivityName=".Activity.Home">
</activity>
"Activity" ist mein Paketname "MovieData" ist mein Aktivitätsname "Home" ist mein Zielaktivitätsname
BEARBEITEN: Wenn Sie Android-API-Level 15 und darunter unterstützen, funktioniert parentActivityName nicht.
Um niedrigere Versionen zu unterstützen, müssen Sie das Metadaten-Tag als hinzufügen
<meta-data
Android:name="PARENT_ACTIVITY"
Android:value="com.example.Activity.Home"/>
ändere app: layout_collapseMode = "parallax" toapp:layout_collapseMode="pin"in imageView . hoffe, dass dies für dich funktioniert
Gehe zu res/values / und öffne styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Ändern Sie parent = "Theme.AppCompat.Light.NoActionBar" in parent = "Theme.AppCompat.Light".
Beginnen Sie dann mit dem Debuggen und entfernen Sie alle unnötigen Codes wie // setSupportActionBar(toolbar);
things . Funktioniert auf jeden Fall.