Toolbar的简单使用和封装
2017-11-12 00:00
369 查看
因为Actionbar的扩展性比较弱,所以一般都是自定义一个titlebar,但是现在有了toolbar,完全可以解决任何头布局的显示。
简单封装后的效果是这样的:
代码:
BaseActivity
MainAncitity
SecondActivity
BaseActivity布局
menu布局:
简单封装后的效果是这样的:
代码:
public class MyToolbar { private Toolbar mToolbar; private AppCompatActivity mActivity; private ActionBar mActionBar; private RelativeLayout rlCustom; public MyToolbar(Toolbar mToolbar, final AppCompatActivity mActivity) { this.mToolbar = mToolbar; this.mActivity = mActivity; rlCustom = (RelativeLayout) mToolbar.findViewById(R.id.rlCustom); //支持ActionBar mActivity.setSupportActionBar(mToolbar); mActionBar = mActivity.getSupportActionBar(); mActionBar.setDisplayHomeAsUpEnabled(true); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mActivity.finish(); } }); } //设置主标题 public MyToolbar setTitle(String title) { mActionBar.setTitle(ti 4000 tle); return MyToolbar.this; } //设置副标题 public MyToolbar setSubTitle(String subTitle) { mActionBar.setSubtitle(subTitle); return MyToolbar.this; } public MyToolbar setTitle(int resId) { mActionBar.setTitle(resId); return MyToolbar.this; } public MyToolbar setSubTitle(int resId) { mActionBar.setSubtitle(resId); return MyToolbar.this; } //设置导航栏图标的点击监听 public MyToolbar setNavigationOnClickListener(View.OnClickListener listener) { mToolbar.setOnClickListener(listener); return MyToolbar.this; } //设置用于工具栏导航按钮的图标 public MyToolbar setNavigationIcon(int resId) { mToolbar.setNavigationIcon(resId); return MyToolbar.this; } // 给左上角图标的左边加上一个返回的图标 public MyToolbar setDisplayHomeAsUpEnabled(boolean isShow) { mActionBar.setDisplayHomeAsUpEnabled(isShow); return MyToolbar.this; } //自定义toolbar的布局 public MyToolbar setCustomView(View view) { rlCustom.removeAllViews(); rlCustom.addView(view); return MyToolbar.this; } //自定义toolbar的布局 public MyToolbar setCustomView(int resId) { View view = mActivity.getLayoutInflater().inflate(resId, null); rlCustom.removeAllViews(); rlCustom.addView(view); return MyToolbar.this; } }
BaseActivity
public abstract class BaseActivity extends AppCompatActivity { private RelativeLayout rlContent; private Toolbar toolBar; private MyToolbar mMyToolbar; @Override public void startActivity(Intent intent) { super.startActivity(intent); overridePendingTransition(R.anim.anim_in_right_left, R.anim.anim_out_right_left); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base_layout); initView(); View view = getLayoutInflater().inflate(getLayoutId(), null, false); rlContent.addView(view); mMyToolbar = new MyToolbar(toolBar, this); } private void initView() { rlContent = (RelativeLayout) findViewById(R.id.rlContent); toolBar = (Toolbar) findViewById(R.id.toolBar); } public abstract int getLayoutId(); public MyToolbar getToolbar() { if (null == mMyToolbar) { mMyToolbar = new MyToolbar(toolBar, this); } return mMyToolbar; } @Override public void finish() { super.finish(); overridePendingTransition(R.anim.anim_in_left_right, R.anim.anim_out_left_right); } }
MainAncitity
public class MainActivity extends BaseActivity { private MyToolbar mMyToolbar; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mMyToolbar = getToolbar(); mMyToolbar.setTitle("主标题").setSubTitle("副标题"); } @Override public int getLayoutId() { return R.layout.activity_main; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } public void first(View view) { startActivity(new Intent(this, SecondActivity.class)); } }
SecondActivity
public class SecondActivity extends BaseActivity { private MyToolbar mMyToolbar; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mMyToolbar = getToolbar(); mMyToolbar.setCustomView(R.layout.layout_custom_toolbar); } @Override public int getLayoutId() { return R.layout.activity_second; } }
BaseActivity布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolBar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary" > <RelativeLayout android:id="@+id/rlCustom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" > </RelativeLayout> </android.support.v7.widget.Toolbar> <RelativeLayout android:id="@+id/rlContent" android:layout_width="match_parent" android:layout_height="match_parent"> </RelativeLayout> </LinearLayout>
menu布局:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_search" android:title="搜索" android:orderInCategory="80" android:icon="@android:drawable/ic_menu_search" app:showAsAction="ifRoom" /> <item android:id="@+id/action_share" android:title="分享" android:orderInCategory="90" android:icon="@android:drawable/ic_menu_share" app:showAsAction="ifRoom" /> <item android:id="@+id/action_settings" android:title="设置" android:orderInCategory="100" app:showAsAction="never"/> </menu>
anim_in_right_left:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300"> <translate android:fromXDelta="100%p" android:toXDelta="0"/> </set>
anim_out_right_left:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300"> <translate android:fromXDelta="0" android:toXDelta="-100%p"/> </set>
anim_in_left_right:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300"> <translate android:fromXDelta="-100%p" android:toXDelta="0"/> </set>
anim_out_left_right:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300"> <translate android:fromXDelta="0" android:toXDelta="100%p"/> </set>
相关文章推荐
- BaseActivity结合toolbar的简单使用和封装
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 用ASP简单封装了几个函数,使用ServerXMLHTTP把网络上的文件保存到本地服务器.
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 重新封装的PHPLib DB类(推荐简单项目使用本类库)
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 使用WinDbg对Windows Live Toolbar死锁的简单分析
- 重新封装的PHPLib DB类(推荐简单项目使用本类库)
- 重新封装的PHPLib DB类(推荐简单项目使用本类库)