Android toolbar change layout

对着背影说爱祢 提交于 2019-12-03 16:28:18

If I understood right, you want to change the toolbar whenever you change the Fragment the user is currently seeing, isn´t that right?

There is a very simple way to achieve this trough your XML. Let's say you want three different styled toolbars.

1) First, you create XML files for every toolbar you need.

2) Then you include every toolbar in to your activity_main.xml, like this:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activities.MainActivity">

    <include
        android:id="@+id/toolbar1"
        layout="@layout/tool_bar1"
        android:visibility="visible" />

    <include
        android:id="@+id/toolbar2"
        layout="@layout/tool_bar2"
        android:visibility="gone" />

    <include
        android:id="@+id/toolbar3"
        layout="@layout/tool_bar3"
        android:visibility="gone" />

    // Here is the rest of your XML code

</RelativeLayout>

See how all three toolbar includes have the visibility property?

Well, now you can toy with this property, and show/hide the desired toolbar whenever you want/need to.

For example:

RelativeLayout mLayout = (RelativeLayout) getActivity().findViewById(R.id.my_main_layout);

Toolbar mToolbar1 = (Toolbar) mLayout.findViewById(R.id.toolbar1);
mToolbar1.setVisibility(View.GONE);

Toolbar mToolbar2 = (Toolbar) mLayout.findViewById(R.id.toolbar2);
mToolbar2.setVisibility(View.GONE);

Toolbar mToolbar3 = (Toolbar) mLayout.findViewById(R.id.toolbar3);
mToolbar3.setVisibility(View.VISIBLE);

And just change which one are you making visible, according to your needs.

Hope this helps.

I don`t think the method of @herrmartell is nice;

In my way,I have three Fragment in a Activity,I defined some different layout resources for a common toolbar xml,and load them in toolbar when I click different button; my code :

  1. common_toolbar xml:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
    
    <!-- your custom layout -->
    
    </android.support.v7.widget.Toolbar>
    
  2. activity_main_toolbar_common_view.xml

    <TextView
        android:id="@+id/action_location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="迪士尼...ˇ"
        android:textColor="@color/white"
        android:textSize="@dimen/larget_text_size"
        android:paddingLeft="10dp"
        android:layout_alignParentStart="true"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"/>
    

  3. activity_main_toolbar_mine_view.xml

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/mine"
        android:textSize="@dimen/big_text_size"
        android:textColor="@color/white"
        android:gravity="center"
        android:layout_centerInParent="true"/>
    
    <ImageView
        android:id="@+id/setting"
        android:layout_width="@dimen/toolbar_icon_size"
        android:layout_height="@dimen/toolbar_icon_size"
        android:src="@drawable/toolbar_setting"
        android:layout_alignParentRight="true"
       />
    

  4. switchToolbar() method in Activity:

    public void switchToolbar(int layout) {
        if(currentToolbarLayout == layout){
            return;
        }
        currentToolbarLayout = layout;
        View  v = getLayoutInflater().inflate(layout,null);
        toolbar.removeAllViews();
        toolbar.addView(v);
    
        switch (layout){
            case R.layout.activity_main_toolbar_common_view:
                v.findViewById(R.id.action_location).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(MainActivity.this, "跳到位置", Toast.LENGTH_SHORT).show();
                    }
                });
                break;
            case R.layout.activity_main_toolbar_mine_view:
                v.findViewById(R.id.setting).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(MainActivity.this, "跳到设置", Toast.LENGTH_SHORT).show();
                    }
                });
                break;
        }
    }
    
  5. I render my toolbar view in the onCreate() method of Activity:

    ButterKnife.bind(this);
    setSupportActionBar(toolbar);
    switchToolbar(R.layout.activity_main_toolbar_common_view);
    
  6. when I switch toolbar, I call:

    switchToolbar(R.layout.activity_main_toolbar_mine_view);
    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!