Я пытался изменить цвет панели инструментов при выборе меню.Я работаю с Fragment, я читал здесь много решений о переполнении стека, но ни одно из них, похоже, не работает.Любая идея, что я делаю не так?
Я пытаюсь изменить цвет с помощью переключателя onNavigationItemSelected () класса MainActivity.
Пока мне удалось изменить толькоцвет панели навигации и строки состояния, но не панели инструментов или панели вкладок.
![enter image description here](https://i.stack.imgur.com/djXCQ.jpg)
Если вам нужна дополнительная информация, просто спросите ее!спасибо!
MainActivity.class
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
DrawerLayout drawerLayout;
NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout = findViewById(R.id.drawer_layout);
navigationView = findViewById(R.id.navigation_view);
if (navigationView != null)
navigationView.setNavigationItemSelectedListener(this);
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new AppBarMainFragment())
.commit();
updateToolbar(getString(R.string.perfil));
}
public void updateToolbar(String title) {
Toolbar toolbar = findViewById(R.id.toolbar);
if (toolbar != null)
toolbar.setTitle(title);
setSupportActionBar(toolbar);
ActionBarDrawerToggle toogle = new ActionBarDrawerToggle(this, drawerLayout, toolbar,
R.string.open_drawer, R.string.close_drawer);
drawerLayout.addDrawerListener(toogle);
toogle.syncState();
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int itemId = item.getItemId();
LinearLayout rl = findViewById(R.id.header_wrapper);
// AppBarLayout abl = findViewById(R.id.fragTabs_Background); Do not work
// Integer colorTo = getResources().getColor(R.color.colorFacebook); Do not work
Fragment fragment = null;
switch (itemId) {
case R.id.nav_home:
fragment = new AppBarMainFragment();
break;
case R.id.nav_facebook:
BaseViewPagerAdapter adapter = new BaseViewPagerAdapter(
getSupportFragmentManager(), new String[] {"Siguiendo", "Seguidores"});
fragment = AppBarMainWithTabsFragment.getInstance(adapter, getString(R.string.facebook));
// setActionBar(getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.colorFacebook))));
// abl.setBackground(new ColorDrawable(getResources().getColor(R.color.colorFacebook)));
rl.setBackgroundColor(getResources().getColor(R.color.colorFacebook));
if (Build.VERSION.SDK_INT >= 21){
getWindow().setNavigationBarColor(getResources().getColor(R.color.colorFacebook));
getWindow().setStatusBarColor(getResources().getColor(R.color.colorDarkFacebook));
}
break;
case R.id.nav_twitter:
BaseViewPagerAdapter adapter1 = new BaseViewPagerAdapter(
getSupportFragmentManager(), new String[] {"Recomendadas", "Miembro", "Tuyas"});
fragment = AppBarMainWithTabsFragment.getInstance(adapter1, getString(R.string.twitter));
break;
case R.id.nav_instagram:
View view = findViewById(android.R.id.content);
Snackbar.make(view, "Se ha pulsado para abrir las configuraciones.", Snackbar.LENGTH_LONG).show();
break;
}
if (fragment != null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment)
.commit();
}
drawerLayout.closeDrawer(GravityCompat.START);
return true;
}
}
Фрагмент
public class AppBarMainWithTabsFragment extends Fragment {
private BaseViewPagerAdapter adapter;
private String title;
public static AppBarMainWithTabsFragment getInstance(BaseViewPagerAdapter adapter, String title) {
AppBarMainWithTabsFragment fragment = new AppBarMainWithTabsFragment();
fragment.adapter = adapter;
fragment.title = title;
return fragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.app_bar_main_with_tabs, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewPager viewPager = view.findViewById(R.id.view_pager);
viewPager.setAdapter(adapter);
TabLayout tabLayout = view.findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(viewPager);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.updateToolbar(title);
}
}
Макет Это макет для barTool с вкладками
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/fragTabs_Background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="?attr/actionBarSize"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
Обновление
Я прочитал решение, предложенное Nilesh Rathod в комментариях, но я не понимаюНе понимаю, как реализовать.
Я только что попробовал решение, предложенное Hardik Kanak в комментариях, и я получаю эту ошибку
--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.socialhub, PID: 9027
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setBackgroundDrawable(android.graphics.drawable.Drawable)' on a null object reference
at com.example.socialhub.MainActivity.onNavigationItemSelected(MainActivity.java:80)
at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:170)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:352)
at android.view.View.performClick(View.java:5280)
at android.view.View$PerformClick.run(View.java:21239)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:234)
at android.app.ActivityThread.main(ActivityThread.java:5526)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Application terminated.
Я также пыталсярешение Мохамад Махди Фарзане но я получаю эту ошибку:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.socialhub, PID: 14964
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setBackgroundDrawable(android.graphics.drawable.Drawable)' on a null object reference
at com.example.socialhub.MainActivity.onNavigationItemSelected(MainActivity.java:80)
at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:170)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:352)
at android.view.View.performClick(View.java:5280)
at android.view.View$PerformClick.run(View.java:21239)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:234)
at android.app.ActivityThread.main(ActivityThread.java:5526)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Помимо ошибок, я также получаю предупреждения о «использовании или переопределении устаревшего API».Есть идеи, что я делаю не так?