您的位置:首页 > 其它

Toolbar的简单使用和封装

2017-11-12 00:00 369 查看
因为Actionbar的扩展性比较弱,所以一般都是自定义一个titlebar,但是现在有了toolbar,完全可以解决任何头布局的显示。

简单封装后的效果是这样的:



代码:

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: