Definieren Sie die folgende Klasse:
public class CenteredToolbar extends Toolbar {
private TextView centeredTitleTextView;
public CenteredToolbar(Context context) {
super(context);
}
public CenteredToolbar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CenteredToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setTitle(@StringRes int resId) {
String s = getResources().getString(resId);
setTitle(s);
}
@Override
public void setTitle(CharSequence title) {
getCenteredTitleTextView().setText(title);
}
@Override
public CharSequence getTitle() {
return getCenteredTitleTextView().getText().toString();
}
public void setTypeface(Typeface font) {
getCenteredTitleTextView().setTypeface(font);
}
private TextView getCenteredTitleTextView() {
if (centeredTitleTextView == null) {
centeredTitleTextView = new TextView(getContext());
centeredTitleTextView.setTypeface(...);
centeredTitleTextView.setSingleLine();
centeredTitleTextView.setEllipsize(TextUtils.TruncateAt.END);
centeredTitleTextView.setGravity(Gravity.CENTER);
centeredTitleTextView.setTextAppearance(getContext(), R.style.TextAppearance_AppCompat_Widget_ActionBar_Title);
Toolbar.LayoutParams lp = new Toolbar.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.CENTER;
centeredTitleTextView.setLayoutParams(lp);
addView(centeredTitleTextView);
}
return centeredTitleTextView;
}
}
...und dann verwenden Sie es einfach anstelle des regulären Toolbar
wie folgt:
Sie benötigen immer noch diese 2 Zeilen Code in Ihrer Activity
(wie bei der Standard Toolbar
):
Toolbar toolbar = (Toolbar) findViewByid(R.id.toolbar); // Beachten Sie, dass Ihre Aktivität nicht wissen muss, dass es sich tatsächlich um einen benutzerdefinierten Toolbar handelt
setSupportActionBar(binding.toolbar);
Das ist alles! Sie müssen den standardmäßig linksbündigen Titel nicht ausblenden, müssen den gleichen XML-Code nicht immer wieder duplizieren, usw., verwenden Sie einfach CenteredToolbar
wie wenn es die Standard-Toolbar
wäre. Sie können auch Ihre benutzerdefinierte Schriftart programmgesteuert festlegen, da Sie jetzt direkten Zugriff auf das TextView
haben. Hoffentlich hilft dies.