woshidan's blog

あいとゆうきとITと、とっておきの話。

ToolbarのNavigationIconとして48dpでないアイコンを指定した場合

Toolbarの48dpのアイコン用領域の中心を指定したアイコンの中心として配置される*1

上詰めとか、左詰めではないみたい。

Toolbarlayout_heightandroid:layout_height="?attr/actionBarSize"の場合、48dp用アイコンの領域に対し、左側に4dpPaddingを設定しておくとちょうどアイコンの中の中心位置とToolbarとの端との間隔が上下左右から揃う塩梅になった*2

公式のアイコンだと小さめのアイコンでも48dpサイズ(描画領域を小さくしている)で用意しているので、これでいいのかは少し自信が無いですが...。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar mToolbar = (Toolbar) findViewById(R.id.custom_toolbar);
        mToolbar.setNavigationIcon(R.drawable.black_square_30dp);
        mToolbar.setTitle("PaddingLeft 4dp");

        mToolbar.inflateMenu(R.menu.menu_main);
    }
<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"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@android:color/white"
    tools:context=".MainActivity"

    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/custom_toolbar"
        android:background="@android:color/darker_gray"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:paddingLeft="4dp"
        >
    </android.support.v7.widget.Toolbar>
</LinearLayout>

アイコンを30dpの黒い正方形にしてPaddingLeftをいじってみる

f:id:woshidan:20151105072826p:plain

f:id:woshidan:20151105072937p:plain

f:id:woshidan:20151105072925p:plain

アイコンを48dpの黒い正方形にしてPaddingLeftをいじってみる

f:id:woshidan:20151105073018p:plain

f:id:woshidan:20151105073024p:plain

f:id:woshidan:20151105073033p:plain

NavigationIconPadding には 0dp に指定した段階で実際には4dpくらい挿入されている気がする...。

*1:図は48dpより小さい場合。アイコン用のDrawableが大きい場合は横方向に広がりつつ上下はToolbarのPaddingの領域に入った部分で切り取られる

*2:API16, API18のエミュレータにて確認