web-dev-qa-db-ja.com

ツールバーの右側にカスタムビューを追加する

私はこれを達成しようとしています(背景が赤いtoolbarのタイマー):

A timer in the toolbar along with red background

customViewtoolbarを追加しようとしています。常に、最後の矢印のすぐ左端になります。以下の画像のテキストYPは、ツールバーに追加されたカスタムTextviewと同様です。 enter image description here

toolbarのコード:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
    Android:id="@+id/base_activity_toolbar"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimary"
    Android:elevation="4dp"
    Android:minHeight="?attr/actionBarSize"
    Android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

レイアウトを追加するためのコード:

    LayoutInflater mInflater= LayoutInflater.from(context);
    View mCustomView = mInflater.inflate(R.layout.textview, null);
    toolbar.addView(mCustomView);

これは、テスト用に現在追加しているレイアウトです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
              Android:orientation="horizontal"
              Android:layout_width="wrap_content"
              Android:gravity="end"
              Android:layout_height="wrap_content">
    <TextView Android:layout_width="wrap_content"
              Android:text="yp"
              Android:layout_height="wrap_content"/>
</LinearLayout>

私は主に何かを失い、理解できませんでした。髪を引っ張ります。

20
Shubham

ViewGroupsの中にToolbarを追加できます

          <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="@dimen/toolbar_height"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <RelativeLayout
             ....
            </RelativeLayout>

           </Android.support.v7.widget.Toolbar>
19
Anoop M

Layout_gravityをrightに設定するだけで機能しました

  <Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:layout_width="0dp"
    Android:layout_height="?android:actionBarSize"
    app:title="NEW REQUESTS"
  >
    <TextView
      Android:layout_width="wrap_content"
      Android:layout_height="wrap_content"
      Android:text="blahblah"
      Android:layout_gravity="right"  
      />
  </Android.support.v7.widget.Toolbar>
19
charlag

与えられた答えは機能しますが、ツールバーにタイトルを設定したい場合(おそらくそうします)、RelativeLayoutを追加するとタイトルが右側に表示されなくなります。この場合、getSupportActionBar().setDisplayShowTitleEnabled(false)を設定してツールバーのタイトルを無効にし、ツールバーに追加する他のビューの隣にカスタムTextViewを追加する必要があります。例として、次のようにImageViewを追加します。

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
    Android:id="@+id/base_activity_toolbar"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimary"
    Android:elevation="4dp"
    Android:minHeight="?attr/actionBarSize"
    Android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

    <RelativeLayout
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent">

        <TextView
            Android:id="@+id/custom_toolbar_title"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerVertical="true"
            style="@style/ActionBarTitle"/>

        <ImageView
            Android:layout_width="20dp"
            Android:layout_height="20dp"
            Android:scaleType="centerCrop"
            Android:adjustViewBounds="true"
            Android:layout_centerVertical="true"
            Android:layout_toRightOf="@id/custom_toolbar_title"
            Android:src="@drawable/arrow"/>

    </RelativeLayout>

</Android.support.v7.widget.Toolbar>
8
Ali Kazi

ちょうど同じ問題を抱えていたが、私は(私の謙虚な意見では)より簡単な解決策を見つけた。

以下からコードをわずかに変更できます。

LayoutInflater mInflater= LayoutInflater.from(context);
View mCustomView = mInflater.inflate(R.layout.textview, null);
toolbar.addView(mCustomView);

宛先:

LayoutInflater mInflater= LayoutInflater.from(context);
View mCustomView = mInflater.inflate(R.layout.textview, null);
toolbar.addView(mCustomView, new Toolbar.LayoutParams(Gravity.RIGHT));

ビューが追加され、重力が右側に設定されます!

8
Sylfo

試してみる。 R.layout.textviewを変更します

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

                <TextView
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:text="TV"
                    Android:id="@+id/textView2"
                    Android:layout_centerVertical="true"
                    Android:layout_alignParentRight="true"
                    Android:layout_alignParentEnd="true" />
            </RelativeLayout>
0
Akash kv