新しいデザインサポートライブラリの機能を実装して、新しいマテリアルデザインのWhatsAppプロファイルページに似た視差スクロールツールバーを作成しようとしています。ただし、オーバーフローメニューと戻るボタンを取得して、上隅に表示することはできません。
次の方法を使用して戻るボタンを表示しようとしましたが、機能しません。
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
また、オーバーフローメニューのonCreateOptionsMenuメソッドの上書きも機能しませんでした。
これらのツールバーアイコンをデザインサポートライブラリからCollapsingToolbarに追加する方法を知っていますか?以下は、アクティビティのレイアウトxmlです。ありがとう!
<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>
私は同じ問題を抱えていましたが、既存の回答からは私を助けてくれませんでした、私の問題の驚くべき修正は質問の説明にありました。
そのため、戻るボタンを使用してツールバーを折りたたむには、コントローラーonCreate
メソッドに次の数行が必要です。
//change id to Your id
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//this line shows back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
このアクティビティのマニフェスト(注意parentActivityName属性):
<activity
Android:name=".SomeActivity"
Android:parentActivityName=".MainActivity"
Android:theme="@style/AppTheme.NoActionBar"/>
テンプレート部分:
<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>
コントローラーonCreate
メソッド:
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();
}
});
このアプローチでは、最初のソリューションで示したものと同じマニフェストとテンプレートを使用します。
私の場合、これは機能します! app:layout_collapseMode="pin"
ツールバーレイアウト内
これをcoordinatorLayoutに入れないようにしてください:
Android:fitsSystemWindows="true"
わたしにはできる。理由はわかりません。がんばろう
以下は、ナビゲーションボタンを有効にします。
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()
}
});
オーバーフローメニューの動作を取得するには、次のようなメニュー項目にshowAsAction:neverを適用しないでmenu.xmlファイルを宣言する必要があります。
<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>
そして、それを次のように膨らませます:
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;
}
});
マニフェストファイルにparentActivityNameタグを追加していない場合は、次のコード行を次のように追加して追加します。
<activity Android:name=".Activity.MovieData"
Android:parentActivityName=".Activity.Home">
</activity>
ここで、「Activity」は私のパッケージ名です。「MovieData」は私のアクティビティ名です。「Home」は宛先アクティビティ名です。
編集:Android APIレベル15以下をサポートしている場合、parentActivityNameは機能しません。
下位バージョンをサポートするには、メタデータタグを次のように追加する必要があります
<meta-data
Android:name="PARENT_ACTIVITY"
Android:value="com.example.Activity.Home"/>
imageViewでapp:layout_collapseMode = "parallax"をapp:layout_collapseMode = "pin"に変更します。これがあなたのために働くことを願っています
Res/values /に移動し、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>
_
Parent = "Theme.AppCompat.Light.NoActionBar"をparent = "Theme.AppCompat.Light"に変更します
次に、デバッグを開始し、// setSupportActionBar(toolbar);
のような不要なコードをすべて削除します。間違いなく動作します。