422 Stimmen

Android-Symbolleiste Titel und benutzerdefinierter Schriftart zentrieren

Ich versuche herauszufinden, wie man eine benutzerdefinierte Schriftart für den Symbolleistentitel verwendet und diesen in der Symbolleiste zentriert (Kundenanforderung).

Im Moment verwende ich die gute alte ActionBar und setze den Titel auf einen leeren Wert. Dann verwende ich setCustomView, um meine benutzerdefinierte Schriftart in einem TextView zu platzieren und sie mit ActionBar.LayoutParams zu zentrieren.

Gibt es einen besseren Weg, das zu tun? Verwendung der neuen Toolbar als meine ActionBar.

1voto

VINAY DANARADDI Punkte 195

Ich stand vor dem gleichen Problem, das ich durch folgende Änderung in MainActivity behoben habe

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
TextView mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);

Und in Fragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    if (view == null) {
        // Layout für dieses Fragment aufblasen
        view = inflater.inflate(R.layout.fragment_example, container, false);
        init();
    }
    getActivity().setTitle("Fragment auswählen");
    return view;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.example_menu, menu);
}

1voto

Ali Khaki Punkte 1150

Für eine benutzerdefinierte Schriftart in der Symbolleiste können Sie die Schriftart des TextView in einem Stil überschreiben und dann wird automatisch auch die Schriftart des Toolbar-Titels in jeder TextView Ihrer App geändert ich habe es in Android Studio 3.1.3 getestet

In Style tun Sie dies:

        <item name="android:fontFamily">@font/your_custom_font</item>

und dann in Ihrem Theme verwenden Sie dies:

@style/defaultTextViewStyle

1voto

wklbeta Punkte 707
private void makeTitleCenter(String title, Toolbar toolbar) {
    if (title != null && !TextUtils.isEmpty(title.trim())) {
        final String tag = " ";
        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle(tag);
        }
        TextView titleTv = null;
        View leftBtn = null;
        for (int i = 0; i < toolbar.getChildCount(); i++) {
            View view = toolbar.getChildAt(i);
            CharSequence text = null;
            if (view instanceof TextView && (text = ((TextView) view).getText()) != null && text.equals(tag)) {
                titleTv = (TextView) view;
            } else if (view instanceof ImageButton) {
                leftBtn = view;
            }
        }
        if (titleTv != null) {
            final TextView fTitleTv = titleTv;
            final View fLeftBtn = leftBtn;
            fTitleTv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    fTitleTv.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    int leftWidgetWidth = fLeftBtn != null ? fLeftBtn.getWidth() : 0;
                    fTitleTv.setPadding(DimenUtil.getResources().getDisplayMetrics().widthPixels / 2 - leftWidgetWidth - fTitleTv.getWidth() / 2, 0, 0, 0);
                    fTitleTv.requestLayout();
                }
            });
        }
    }
}

0voto

Hitesh Sahu Punkte 37527

Das Einstellen von android:gravity="center" hat bei mir funktioniert

Kein Styling nichts. Die Toolbar ist im Grunde eine ViewGroup, alles was du tun musst, ist die Ausrichtung der Elemente darin festzulegen.

0voto

Waqar Afzal Punkte 71

Dies ist, was ich mit einem Navigations-Icon und einem Text-View gemacht habe. Jetzt kannst du eine Erweiterung erstellen, um es überall anzuwenden. Aber du musst es auf jeder Aktivität anwenden.

(toolbar[0] as AppCompatTextView).let {
            it.viewTreeObserver.addOnDrawListener {
                it.layoutParams = it.layoutParams.apply {
                    width = Toolbar.LayoutParams.MATCH_PARENT
                    (this as ViewGroup.MarginLayoutParams).apply {
                        marginEnd = toolbar[1].width
                    }
                }
                it.textAlignment = View.TEXT_ALIGNMENT_CENTER
            }

        }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X