1.通过getSupportActionBar()获取actionBar,获取之前需要在AndroidManifest.xml中查看android:theme主题设置为什么格式;如果设置为NoActionBar则返回为null。
actionBar = getSupportActionBar();
2.获取actionBar成功后,设置actionBar的宽、高参数。
ActionBar.LayParams params = new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARAENT);
3.创建新的View,用于映射到自定义的xml布局。
View view = LayoutInflater.from(this).inflate(R.layout.layout_actionbar, null);
4.使用映射到xml后的view,调用xml中的控件,设置相应事件监听。
btnLeftBack = view.findViewById(R.id.actionbar_back);
btnLeftBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
5.actionBar设置布局和宽、高参数。
actionBar.setCustomView(view, params);
6.actionBar是否能够展示出来。
actionBar.setDisplayShowCustomEnabled(true);
7.设置actionBar和左右的边距。
Toolbar parent = (Toolbar)view.getParent();
parent.setContentInsetsAbsolute(0, 0);
代码:
基类:
public class BaseActivity extends AppCompatActivity {
private ActionBar actionBar;
private ImageButton btnLeftBack;
private TextView tvTitleFirst;
private TextView tvTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void initTitle(String titleFirst, String title){
actionBar = getSupportActionBar(); // 返回一个actionBar,如果没有的话,返回为null
// 创建一个布局参数
ActionBar.LayoutParams params = new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
// 创建一个view,映射到xml布局,调用其中的控件
View view = LayoutInflater.from(this).inflate(R.layout.layout_actionbar, null);
btnLeftBack = view.findViewById(R.id.actionbar_back);
btnLeftBack.setOnClickListener(view1 -> BaseActivity.this.finish());
tvTitleFirst = view.findViewById(R.id.actionbar_title_first);
tvTitleFirst.setText(titleFirst);
tvTitle = view.findViewById(R.id.actionbar_title);
tvTitle.setText(title);
actionBar.setCustomView(view, params);
actionBar.setDisplayShowCustomEnabled(true);
// actionBar.setDisplayShowTitleEnabled(false);
// actionBar.setDisplayHomeAsUpEnabled(false);
// actionBar.setDisplayUseLogoEnabled(false);
// actionBar.setHomeButtonEnabled(false);
Toolbar parent = (Toolbar) view.getParent();
parent.setContentInsetsAbsolute(0,0);
}
}
布局文件(layout_actionbar.xml):
<?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="?actionBarSize"
android:orientation="horizontal"
android:background="#FFFFFF">
<ImageButton
android:id="@+id/actionbar_back"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_arrow_back_black_24dp"
android:background="#00000000"
android:layout_margin="10dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginStart="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp">
<TextView
android:id="@+id/actionbar_title_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#808080"
android:text="@string/app_name"
android:textSize="13sp"/>
<TextView
android:id="@+id/actionbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="@string/app_name"
android:textStyle="bold"
android:textSize="20sp"/>
</LinearLayout>
</LinearLayout>
调用方法:
public class MainActivity extends BaseActivity{
@Override
protected void onCreate(Bundle saveInstanceState){
? ? ? ? super.onCreate(sacedInstanceState);
? ? ? ? setContentView(R.layout.activity_main);
? ? ? ? initTitle("first title", "second title");
}
效果展示:
?
|