Изменить цвет панели инструментов на фрагмент - PullRequest
0 голосов
/ 05 марта 2019

Я пытался изменить цвет панели инструментов при выборе меню.Я работаю с Fragment, я читал здесь много решений о переполнении стека, но ни одно из них, похоже, не работает.Любая идея, что я делаю не так?

Я пытаюсь изменить цвет с помощью переключателя onNavigationItemSelected () класса MainActivity.

Пока мне удалось изменить толькоцвет панели навигации и строки состояния, но не панели инструментов или панели вкладок.

enter image description here

Если вам нужна дополнительная информация, просто спросите ее!спасибо!

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».Есть идеи, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

есть проблема в вашем коде.дайте область видимости вашей панели инструментов не метод.объявите вашу панель инструментов так же, как вы объявили NavigationView и макет drawyer вне updateToolbar () метода.

Toolbar toolbar;

, затем инициализируйте его следующим образом:

toolbar = findViewById(R.id.toolbar);

и затем вы 'Вы сможете изменить цвет:

toolbar.setBackgroundColor(getResources().getColor(R.color.green));
0 голосов
/ 06 марта 2019

Если у вас есть место на фрагменте, добавьте панель инструментов внутри фрагмента и используйте тему действия в качестве Appcompat.noactionbar.Не используйте панель инструментов деятельности.Это гораздо более длинная задача.Кроме того, если вы хотите добавить некоторую функциональность внутри панели инструментов, вам будет немного сложно перейти от фрагмента к добавлению функциональности на панель инструментов активности.

Short * : - используйте 1 панель инструментов для 1 фрагмента и запомнитекакой вид панели инструментов вы используете.Панель инструментов версии поддержки Android или обычная панель инструментов

0 голосов
/ 05 марта 2019

Вы можете добавить эту строку в свою деятельность

toolbar.setBackgroundColor(getResources().getColor(R.color.green));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...