bottomnavigationで「マイページ」を開いた際に、マイページの部分が青く光るようにしたいのですが、グレーのままになってしまいます。
調べた所、「drawableにselectorを作って、state_pressed=trueにする」と書かれているものがありましたので、やってみましたがうまくいきませんでした。
不足している情報等がありましたら、指摘していただけると幸いです。よろしくお願いします。
bottom_nav.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/originFriendActivity"
android:icon="@drawable/ic_action_friend"
android:title="@string/bottomnav_friend" />
<item
android:id="@+id/originEventActivity"
android:icon="@drawable/ic_action_event"
android:title="@string/bottomnav_event" />
<item
android:id="@+id/originMyPageActivity"
android:icon="@drawable/ic_action_mypage"
android:title="@string/bottomnav_mypage" />
</menu>
activity_origin_my_page.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/originmypage_relativelayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:background="@color/colorPrimary"
tools:context=".originMyPage.OriginMyPageActivity">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/btm_nav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="-2dp"
android:layout_marginBottom="-7dp"
app:itemBackground="@color/whiteColor"
app:menu="@menu/bottom_nav" />
<LinearLayout
android:id="@+id/originmypage_linearlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:titleTextColor="@android:color/white" />
<FrameLayout
android:id="@+id/originmypage_framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
</RelativeLayout>
selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_action_friend"
android:state_pressed="true" />
<item android:drawable="@drawable/ic_action_friend" />
<item android:drawable="@drawable/ic_action_event"
android:state_pressed="true" />
<item android:drawable="@drawable/ic_action_event" />
<item android:drawable="@drawable/ic_action_mypage"
android:state_pressed="true" />
<item android:drawable="@drawable/ic_action_mypage" />
</selector>
(補足)
https://gyazo.com/1af373aad44d1ebd5cc1b1d83963a346
OnNavigationItemSelectedListenerの一番下をtrueに返した所、画面遷移後にもう一度ボタンを押せば光るようにはなったのですが、遷移と同時に光ってはくれませんでした。
OriginMyPageActivity.kt
private val mOnNavigationItemSelectedListener =
BottomNavigationView.OnNavigationItemSelectedListener {
item ->
when (item.itemId){
R.id.originFriendActivity -> {
val intent = Intent(this, OriginFriendActivity::class.java)
startActivity(intent)
return@OnNavigationItemSelectedListener true
}
R.id.originEventActivity -> {
}
R.id.originMyPageActivity ->{
val intent = Intent(this, OriginMyPageActivity::class.java)
startActivity(intent)
return@OnNavigationItemSelectedListener true
}
}
true
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
まず、色が変わらない点についてですが、BottomNavigationのアイテムが選択されていないのではないでしょうか?BottomNavigationView.OnNavigationItemSelectedListener
の実装でtrueを返すようにしないと、タップしたアイテムが選択されません。falseを返すようになっていないか確認してみてください。
BottomNavigationのアイテムが正しく選択されていれば、アプリのテーマ内で設定したprimaryColorがアイテムの選択色になっているはずです。これを任意の色に変更したい場合は、BottomNavigationViewのapp:itemIconTint
を利用してselectorのXMLを設定します。
- res/color/bottom_navigation_tint.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 選択時 -->
<item android:color="..." android:state_selected="true"/>
<!-- 通常時 -->
<item android:color="..."/>
</selector>
- layout内
<com.google.android.material.bottomnavigation.BottomNavigationView
...
app:itemIconTint="@color/bottom_navigation_tint"
app:itemTextColor="@color/bottom_navigation_tint"
/>
参考: ドキュメント
https://material.io/develop/android/components/bottom-navigation/
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.11%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2020/06/21 17:32
ご指摘いただいた点を反映したのですが、解決することができませんでした。
補足に書きました通り、OnNavigationItemSelectedListenerも入っておりました。
また、MVP構成でFragmentではなく、Activityの部分にbottomnavを記入していることも理由の1つではないかと思っているのですが、そこは関係ないでしょうか?
よろしくお願いいたします。
2020/06/21 17:39
2020/06/21 20:30
現状を再び補足に記入いたしましたので、ご確認お願いいたします。
2020/06/22 22:44
BottomNavigationViewは基本的にはActivityを起動するのではなく、コンテンツ部分のFragmentを切り替えるように利用するものですので、そのように実装した方がお望みの挙動を実現しやすいと思います。
2020/06/29 19:06
自分で調べてみたのですが、「遷移先のactivityでアイテムの選択をする」の具体的な方法が分かりませんので、教えていただけないでしょうか?
自分なりには、onoptionsitemselectedやonnavdestinationselectedの使用かと考えました。
そうなのですね、全く知りませんでした。
この問題の解決ができ次第、fragmentへの切り替えも仲間と話してみます!
2020/07/11 11:58
> 自分で調べてみたのですが、「遷移先のactivityでアイテムの選択をする」の具体的な方法が分かりませんので、教えていただけないでしょうか?
遷移先のActivityでBottomNavigationViewに対してsetSelectedItemIdメソッドを呼んであげればOKです。
2020/07/12 17:20
詳らかにありがとうございます!