web-dev-qa-db-ja.com

アイコンを中央に配置する方法Androidアクションバー

アイコンをAndroidアクションバーの中央に配置しようとしています。左側にボタン、中央にアイコン、メニューオプションが中央にあるカスタムレイアウトを使用しています。正しい。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/ActionBarWrapper"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical" >



        <ImageButton
            Android:id="@+id/slideMenuButton"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@drawable/ic_menu_bookmark" />

        <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:id="@+id/RelativeLayout1"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:orientation="vertical"
            Android:layout_centerInParent="true"  >
            <ImageView
                Android:id="@+id/icon"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:src="@drawable/ic_launcher"
                Android:layout_centerInParent="true" />
        </RelativeLayout>



</RelativeLayout>

ImageViewをラップするRelativeLayoutを使用して、または使用せずにこれを試しました。左ボタンが正常に表示され、layout_toRightOfでアイコンを設定できますが、中央に配置できません。誰かアイデアはありますか?

編集:これがoncreateメソッドのAndroidコードです。

ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowTitleEnabled(false);
    actionBar.setDisplayUseLogoEnabled(false);
    actionBar.setDisplayHomeAsUpEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayOptions(actionBar.DISPLAY_SHOW_CUSTOM);
    View cView = getLayoutInflater().inflate(R.layout.actionbar, null);
    actionBar.setCustomView(cView);
11
smokingoyster

はい。これはうまくいくはずです。これを試してください(通常のアクティビティでテスト済み):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/ActionBarWrapper"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:orientation="horizontal">

    <ImageButton
        Android:id="@+id/slideMenuButton"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:src="@drawable/ic_launcher"
        Android:layout_alignParentLeft="true" />

    <ImageView
        Android:id="@+id/icon"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:src="@drawable/ic_launcher"
        Android:layout_centerVertical="true"
        Android:layout_centerInParent="true"  />    

</RelativeLayout>
8
Kanth

以前の回答は私には機能しません(Android 4.4デバイス)。外部コンテナビューグループが完全に拡張されなかったため、コンテナグループと中央の内部ロゴはすでに存在していましたタイトルバーで左揃え。

通常のアクションバーのロゴとタイトル(左側)を有効にするかどうかに関係なく、通常のアクションバーメニュー(右側)で機能するレイアウトを見つけました。この例では、追加のロゴのみを中央に配置します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:orientation="horizontal"
>

    <View Android:layout_width="0dp"
          Android:layout_height="match_parent"
          Android:layout_weight="1"
    />

    <ImageView Android:layout_width="wrap_content"
               Android:layout_height="wrap_content"
               Android:src="@drawable/my_logo"
               Android:layout_gravity="center_vertical"
               Android:contentDescription="Logo"
        />

    <View Android:layout_width="0dp"
          Android:layout_height="match_parent"
          Android:layout_weight="1"
      />

</LinearLayout>

これにより、カスタムビューを有効にする必要があります

ActionBar actionBar = getActionBar();
actionBar.setDisplayShowCustomEnabled(true);
View cView = getLayoutInflater().inflate(R.layout.actionbar, null);
actionBar.setCustomView(cView);

ただし、この方法ではありません(アクションバーの他のすべての要素を無効にします)。

// actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
6
Udo

アクションバーにカスタムビューを追加できます。カスタムビューとしてLinearLayoutを追加し、linearlayoutにサブビューを追加するだけです。この手法を使用して、真ん中に4つのボタンを追加しました。

カスタムビューを追加するには、actionBar.setCustomView(view)を使用します。また、actionBar.setDisplayOptionsを使用してオプションDISPLAY_SHOW_CUSTOMを設定します。

バーにカスタムビューができたら、通常のレイアウト手順を使用して、必要な効果を取得します。使用できるトリックの1つは、3つのネストされた線形レイアウトを作成し、それぞれに重みを割り当てることです。たとえば、1,4,1なので、中央のレイアウトで最大のスペースが得られます。これは例です。もちろん、空白にしたい場合は、右側のレイアウトのボタンを省略できます。このアプローチを使用すると、正確な中心を達成できます。

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal" >

    <LinearLayout
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:background="#F00"
        Android:orientation="horizontal" >

        <Button
            Android:id="@+id/button1"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Button" />

    </LinearLayout>

    <LinearLayout
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="2"
        Android:background="#0F0"
        Android:gravity="center_horizontal"
        Android:orientation="horizontal" >

        <Button
            Android:id="@+id/button2"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Button" />

    </LinearLayout>

    <LinearLayout
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight="1"
        Android:background="#00F"
        Android:gravity="right"
        Android:orientation="horizontal" >

        <Button
            Android:id="@+id/button3"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Button" />

    </LinearLayout>
</LinearLayout>
1
Nathan