少し長くなります。また文章が
わからない箇所もあるかと思いますが
どうぞよろしくお願いいたします。
現在、android studioでショッピングサイトの作成をしております。
BottomNavigationViewにて作成しているのですが
下に表示されるアイコンの大きさを均等にする方法を教えていただきたいです。
写真のように[商品]だけが大きく表示されてしまいます。
当方が書いてきたコードは以下です。
MaimActivity.java
↓↓↓↓↓↓↓↓↓↓↓↓↓
import
1import android.support.annotation.NonNull; 2import android.support.design.widget.BottomNavigationView; 3import android.support.v7.app.AppCompatActivity; 4import android.view.MenuItem; 5import android.widget.TextView; 6 7public class MainActivity extends AppCompatActivity { 8 9 private TextView mTextMessage; 10 11 private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener 12 = new BottomNavigationView.OnNavigationItemSelectedListener() { 13 14 @Override 15 public boolean onNavigationItemSelected(@NonNull MenuItem item) { 16 switch (item.getItemId()) { 17 case R.id.navigation_product: 18 mTextMessage.setText(R.string.title_product); 19 return true; 20 case R.id.navigation_cart: 21 mTextMessage.setText(R.string.title_cart); 22 return true; 23 case R.id.navigation_delivery_status: 24 mTextMessage.setText(R.string.title_delivery_status); 25 return true; 26 case R.id.navigation_mypage: 27 mTextMessage.setText(R.string.title_mypage); 28 return true; 29 case R.id.navigation_other: 30 mTextMessage.setText(R.string.title_other); 31 return true; 32 } 33 return false; 34 } 35 }; 36 37 @Override 38 protected void onCreate(Bundle savedInstanceState) { 39 super.onCreate(savedInstanceState); 40 setContentView(R.layout.activity_main); 41 42 mTextMessage = (TextView) findViewById(R.id.message); 43 BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); 44 navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); 45 } 46}
Activity Main
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<android.support.constraint.ConstraintLayout 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/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.design.widget.BottomNavigationView android:id="@+id/navigation" android:layout_width="0dp" android:layout_height="59dp" android:background="?android:attr/windowBackground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/navigation" /> </android.support.constraint.ConstraintLayout>
navigation.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/navigation_product" android:icon="@drawable/ic_home_black_24dp" android:title="商品" /> <item android:id="@+id/navigation_cart" android:icon="@drawable/ic_shopping_cart_black_24dp" android:title="カート" /> <item android:id="@+id/navigation_delivery_status" android:icon="@drawable/ic_local_shipping_black_24dp" android:title="配送状況" /> <item android:id="@+id/navigation_mypage" android:icon="@drawable/ic_person_black_24dp" android:title="マイページ" /> <item android:id="@+id/navigation_other" android:icon="@drawable/ic_settings_black_24dp" android:title="その他" /> </menu>
手順①
[4つ以上のアイテムを均等の大きさで並べる]
4つ以上のアイテムを均等に並べるにはレイアウトをごにょごにょする必要があるが、今回はBottomNavigationViewを継承してBottomNavigationViewの独自クラスをするのではなく
「BottomNavigationViewHelper」というヘルパークラスを作成してBottomNavigationViewを作るときにレイアウトを調整する。
BottomNavigationViewHelperを新規に作成する
こちらがwebからみつけだしたコードなのですが
どう変更したら良いか教え頂けますと幸いです。
package com.myapp.myapp; import android.support.design.internal.BottomNavigationItemView; import android.support.design.internal.BottomNavigationMenuView; import android.support.design.widget.BottomNavigationView; import java.lang.reflect.Field; public class BottomNavigationViewHelper { /** * BottomNavigationViewのアイテムのサイズの調整、アイコンサイズ調整、タイトルの削除 * * @param view */ public static void disableShiftMode(BottomNavigationView view) { BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0); try { Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode"); shiftingMode.setAccessible(true); shiftingMode.setBoolean(menuView, false); shiftingMode.setAccessible(false); for (int i = 0; i < menuView.getChildCount(); i++) { /** * アイテムの幅調整 */ BottomNavigationItemView bottomNavigationItemView = (BottomNavigationItemView) menuView.getChildAt(i); // noinspection RestrictedApi bottomNavigationItemView.setShiftingMode(false); // チェックされた値を設定すると、ビューが更新されるみたい // noinspection RestrictedApi bottomNavigationItemView.setChecked(false); } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
手順②
ActivityからBottomNavigationViewHelperを呼びす onCreateでBottomNavigationViewHelper#disableShiftModeへBottomNavigationViewを渡し調整、その後ついでに選択のリスナーを実装 // ボトムナビゲーションを読み込む BottomNavigationView bottomavigation = (BottomNavigationView) findViewById(R.id.bottom_navigation); // BottomNavigationViewHelperでアイテムのサイズ、アニメーションを調整 BottomNavigationViewHelper.disableShiftMode(bottomavigation); // BottomNavigationViewを選択したときのリスナー bottomavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { // 各選択したときの処理 switch (item.getItemId()) { case R.id.nav_camera: return true; case R.id.nav_gallery: return true; case R.id.nav_slideshow: return true; case R.id.nav_manage: return true; } return false; } });
どこをどう変更して追加すると
エラーがなく正常に作動するのか、わかりませんmm
回答1件
あなたの回答
tips
プレビュー