web-dev-qa-db-ja.com

androidでツールバーのアイコンを中央に配置する方法

私は同様の質問をしました ここ ...私は答えの中にいくつかのチュートリアルを得ました。しかし、この質問はdiffrenetです。その方法はどれも私のプロジェクトでは機能しないからです。

すべてのアイコンをツールバーの中央に配置したい

私はすべての利用可能な方法をテストします...しかし常にアイコンは左側に浮かんでいます。

アイコンを中央揃えにしたい(左のアイコンが左に浮き、右のアイコンが右に浮き、他のアイコンが中央に浮くようにする)

Activity.Main.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"   // I add vertical
    tools:context=".MainActivity">

    <include
        Android:id="@+id/tool_bar"
        layout="@layout/tool_bar"
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"  // I add match_parent
        Android:layout_gravity="center" />   // I add center
</LinearLayout>.

tool_bar.xmlにもあります

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
    Android:layout_height="wrap_content"
    Android:layout_height="match_parent"
    Android:background="@color/ColorPrimary"
    Android:elevation="2dp"
    Android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"
    Android:layout_gravity="center"  // I add center
    xmlns:Android="http://schemas.Android.com/apk/res/Android" />

main_menu.xml

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools" tools:context=".MainActivity">

<item
    Android:id="@+id/action_forward"

    Android:title="forward"
    Android:icon="@drawable/ic_action_arrow_forward"
    app:showAsAction="always"
    ></item>


<item
    Android:id="@+id/action_zoom_in"
    Android:title="zoom in"
    Android:icon="@drawable/ic_action_zoom_in"
    app:showAsAction="always"
    ></item>
<item ...

上記のコードの場合(main_menu.xml)in <item>私はこれらすべてのコードを試しました:

Android:layout_width="match_parent"
Android:layout_weight=".2" // 20%
Android:gravity="center"
Android:layout_centerVertical="true"
Android:layout_centerHorizontal="true"

アイコンを揃えるために何ができるか分かりません。私は時間をグーグルで検索し、すべてのシナリオを試しました

何が悪いの?すべてのテストで、変化は見られません... enter image description here

pic2が欲しかった前(上の写真)でも今は中央に配置したいだけです!

私のすべてのテストでは、写真1のみを取得します。変更はありません。

10
partiz

問題を修正し、お楽しみください:)

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:elevation="4dp"
    Android:background="?attr/colorPrimary">
    <!-- Code for your Left Button -->
    <ImageView
        Android:id="@+id/yourId"
        Android:src="@mipmap/yourLeftIcon"
        Android:layout_width="wrap_content"
        Android:layout_height="fill_parent"
        Android:layout_marginLeft="20dp"
        Android:layout_marginRight="20dp"
        Android:layout_marginTop="4dp"
        Android:layout_marginBottom="4dp"
        Android:layout_gravity="left" />
        <!-- Here is the main code for your Middle Buttons -->
        <LinearLayout
            Android:layout_width="wrap_content"
            Android:layout_height="match_parent"
            Android:orientation="horizontal"
            Android:layout_gravity="center"
            Android:gravity="center">
            <Button
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:background="@drawable/ic_launcher"
                Android:id="@+id/button1"/>
            <Button
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:background="@drawable/ic_launcher"
                Android:id="@+id/button2"/>
            <Button
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:background="@drawable/ic_launcher"
                Android:id="@+id/button3"/>
            <Button
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:background="@drawable/ic_launcher"
                Android:id="@+id/button4" />
        </LinearLayout>
    <!-- Code for your Right Button -->
    <ImageView
        Android:id="@+id/yourId"
        Android:src="@mipmap/yourRightIcon"
        Android:layout_width="wrap_content"
        Android:layout_height="fill_parent"
        Android:layout_marginLeft="20dp"
        Android:layout_marginRight="20dp"
        Android:layout_marginTop="4dp"
        Android:layout_marginBottom="4dp"
        Android:layout_gravity="right" />
</Android.support.v7.widget.Toolbar>
5
asadnwfp

ツールバーは他のビューと同じです。子を直接追加して、通常のビューと同じようにアクセスできます。

これはあなたの質問に対する正確な答えではありませんが、それはあなたに行く方法を教えてくれます。

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar   xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:background="@Android:color/holo_red_light"
    Android:elevation="2dp"
    Android:theme="@style/Base.ThemeOverlay.AppCompat.Dark">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <Button
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/ic_launcher"
            Android:id="@+id/button1"/>

        <Button
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/ic_launcher"
            Android:id="@+id/button2"/>

        <Button
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/ic_launcher"
            Android:id="@+id/button3"/>

        <Button
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/ic_launcher"
            Android:id="@+id/button4" />

    </LinearLayout>

</Android.support.v7.widget.Toolbar>

次に、メインフラグメントまたは他の場所で、このようなものにアクセスできます。

    Toolbar mToolbar = (Toolbar) root.findViewById(R.id.tool_bar);

    Button button1 = (Button) mToolbar.findViewById(R.id.button1);
    Button button2 = (Button) mToolbar.findViewById(R.id.button2);
    Button button3 = (Button) mToolbar.findViewById(R.id.button3);
    Button button4 = (Button) mToolbar.findViewById(R.id.button4);

この方法を使用して、任意の方法でカスタムツールバーを作成できます。おそらく相対レイアウトを使用することをお勧めします。

2
Eoin

次のようにプログラムで行うことができます。

mToolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            ImageView imageView = (ImageView)mToolbar.findViewById(R.id.logo);
            if( mToolbar == null ){
                return;
            }
            int toolbarWidth = mToolbar.getWidth();
            int imageWidth = imageView.getWidth();
            imageView.setX((toolbarWidth-imageWidth)/2);
        }
    });

layout_toolbar.xmlをカスタマイズします。

    <Android.support.v7.widget.Toolbar 
            xmlns:Android="http://schemas.Android.com/apk/res/Android"
            xmlns:app="http://schemas.Android.com/apk/res-auto"
            Android:id="@+id/toolbar"
            style="@style/Toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="@dimen/toolbar_height"                                                                   
            Android:background="@drawable/toolbar_background"
            Android:focusable="false"                                
            app:titleTextAppearance="@style/AppTheme.Toolbar.Title">
            <ImageView
                Android:id="@+id/logo"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:src="@drawable/toolbar_logo"/>

    </Android.support.v7.widget.Toolbar>
0
DàChún

この解決策はひどいことは知っていますが、私にとってはうまくいきます。

まず、LinearLayoutでは、1つではなく3つのツールバーを配置できます。

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal">

    <Android.support.v7.widget.Toolbar Android:id="@+id/bottomToolbarLeft"
        Android:layout_width="0dp"
        Android:layout_height="?attr/actionBarSize"
        Android:layout_weight="1.0"
        Android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>

    <Android.support.v7.widget.Toolbar Android:id="@+id/bottomToolbarCenter"
        Android:layout_width="wrap_content"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>

    <Android.support.v7.widget.Toolbar Android:id="@+id/bottomToolbarRight"
        Android:layout_width="0dp"
        Android:layout_height="?attr/actionBarSize"
        Android:layout_weight="1.0"
        Android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>

</LinearLayout>

各ツールバーには、独自のメニューリソースが必要です。

次に、次のようになります。 アイコンは中央に配置されますが、左側のアイコンは左側の境界線に揃えられません

最後に、左側のアイコンを揃えるには、左側のツールバーに次のパラメータを設定するだけです。

Android:layoutDirection="rtl"

結果は次のとおりです。 目的の順序

0
LevshinN

おそらくあなたを助けます:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/appBar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:theme="@style/AppTheme.AppBarOverlay">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbarPath"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="?attr/colorPrimary">

            <ImageView
                Android:id="@+id/imgBack"
                Android:layout_width="wrap_content"
                Android:layout_height="fill_parent"
                Android:layout_gravity="left"
                Android:layout_marginBottom="4dp"
                Android:layout_marginLeft="20dp"
                Android:layout_marginRight="20dp"
                Android:layout_marginTop="4dp"
                Android:src="@drawable/ic_action_back" />

            <LinearLayout
                Android:layout_width="wrap_content"
                Android:layout_height="match_parent"
                Android:layout_gravity="center"
                Android:gravity="center"
                Android:orientation="horizontal">

                <ImageView
                    Android:id="@+id/imgClear"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_marginRight="15dp"
                    Android:src="@drawable/ic_action_discard" />

                <ImageView
                    Android:id="@+id/imgStop"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_marginRight="15dp"
                    Android:src="@drawable/ic_action_stop" />

                <ImageView
                    Android:id="@+id/imgPath"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_marginRight="15dp"
                    Android:src="@drawable/ic_action_merge" />

                <ImageView
                    Android:id="@+id/imgToggle"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:src="@drawable/ic_action_map" />
            </LinearLayout>

            <ImageView
                Android:id="@+id/imgForward"
                Android:layout_width="wrap_content"
                Android:layout_height="fill_parent"
                Android:layout_gravity="right"
                Android:layout_marginBottom="4dp"
                Android:layout_marginLeft="20dp"
                Android:layout_marginRight="20dp"
                Android:layout_marginTop="4dp"
                Android:src="@drawable/ic_action_forward" />
        </Android.support.v7.widget.Toolbar>
    </Android.support.design.widget.AppBarLayout>


    <fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:tools="http://schemas.Android.com/tools"
        Android:id="@+id/mapPath"
        Android:name="com.google.Android.gms.maps.SupportMapFragment"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_below="@+id/appBar" />

</RelativeLayout>

あなたのstyle.xml 書く :

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

次にmanifest.xml

<application
    Android:name="com.ir.zanis.app.AppController"
    Android:allowBackup="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme.NoActionBar"> <===See here===
      .......
      .............
       .............
0
user4813855

親のレイアウトには配置を適用してみてください。

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="center">
<Button ...any attributes.../>
...any items...
</LinerLayout>
0
Kaloglu