0

アクションメニュー項目をアクションバーに動的に追加しています。「バッジ」効果が必要なため、描画可能なアイコンだけでなく、項目にビューを設定しています。私の問題は、ビューが設定されているアイテムがある場合、アクションバーの右端にも配置されることです。ある種のインセットが欲しいのですが、それを達成するものは何もないようです。アクション ビュー レイアウトにマージンを設定し、XML とプログラムでインセットを設定しようとしましたが、何も変わりません。アクションが端に表示されないようにする方法を知っている人はいますか?

これは私が今見ているものです:

ここに画像の説明を入力

そして、左端とタイトルの間の左側のように、アイコンとアクションバーの右端の間にある種のパディング/マージンが必要です。

ここにいくつかのコードがあります:

アクション メニュー項目のビュー (res/layout/navbar_action.xml):

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="53dp"
              android:layout_height="53dp"
              android:layout_gravity="center_vertical"
              android:layout_marginRight="12dp">

    <ImageView
        android:id="@+id/navbar_icon"
        android:layout_width="44dp"
        android:layout_height="44dp"
        android:layout_gravity="bottom|left"/>

    <TextView
        android:id="@+id/navbar_badge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top|right"
        android:background="@drawable/navbar_badge_circle"
        android:gravity="center"
        android:textSize="@dimen/textsize_caption"
        android:visibility="gone"
        />
</FrameLayout>

基本アクティビティでのアクション バーとアクション メニューの設定:

public abstract class BaseActivity extends AppCompatActivity {

    public static final int MENU_PRIMARY = 0;
    public static final int MENU_SECONDARY = 1;

    protected ActionBar actionBar;

    boolean hasPrimaryAction = false;
    String primaryActionTitle;
    MenuItem.OnMenuItemClickListener primaryActionListener;
    View primaryActionView;
    boolean hasSecondaryAction = false;
    String secondaryActionTitle;
    MenuItem.OnMenuItemClickListener secondaryActionListener;
    View secondaryActionView;

    ...

    protected boolean initToolbar() {
        if (getSupportActionBar() != null) {
            actionBar = getSupportActionBar();
            return true;
        }
        Toolbar toolbar = (Toolbar) findViewById(R.id.action_bar);
        if (toolbar != null) {
            toolbar.setVisibility(View.VISIBLE);
            setSupportActionBar(toolbar);
            actionBar = getSupportActionBar();
            return true;
        }
        return false;
    }

    ...

    public void setAction(String title, Drawable icon, int actionNumber) {
        if (actionNumber == MENU_PRIMARY) {
            hasPrimaryAction = true;
            primaryActionTitle = title;
            primaryActionView = LayoutInflater.from(this).inflate(R.layout.navbar_action, null);
            ImageView iconView = (ImageView) primaryActionView.findViewById(R.id.navbar_icon);
            iconView.setImageDrawable(icon);
            primaryIcon = icon;
        } else if (actionNumber == MENU_SECONDARY) {
            hasSecondaryAction = true;
            secondaryActionTitle = title;
            secondaryActionIcon = icon;
            secondaryActionView = LayoutInflater.from(this).inflate(R.layout.navbar_action, null);
            ImageView iconView = (ImageView) secondaryActionView.findViewById(R.id.navbar_icon);
            iconView.setImageDrawable(icon);
        }
        supportInvalidateOptionsMenu();
    }

    public void setActionBadge(int actionNumber, int badgeCount) {
        if (actionNumber == MENU_PRIMARY) {
            if (primaryActionView != null) {
                TextView badgeView = (TextView) primaryActionView.findViewById(R.id.navbar_badge);
                if (badgeCount > 0){
                    badgeView.setVisibility(View.VISIBLE);
                    badgeView.setText(String.valueOf(badgeCount));
                } else {
                    badgeView.setVisibility(View.INVISIBLE);
                }
            }
        } else if (actionNumber == MENU_SECONDARY) {
            if (secondaryActionView != null) {
                TextView badgeView = (TextView) secondaryActionView.findViewById(R.id.navbar_badge);
                if (badgeCount > 0) {
                    badgeView.setVisibility(View.VISIBLE);
                    badgeView.setText(String.valueOf(badgeCount));
                } else {
                    badgeView.setVisibility(View.INVISIBLE);
                }
            }
        }
        supportInvalidateOptionsMenu();
    }

    public void removeAction(int actionNumber) {
        if (actionNumber == MENU_PRIMARY) {
            hasPrimaryAction = false;
        } else if (actionNumber == MENU_SECONDARY) {
            hasSecondaryAction = false;
        }
        supportInvalidateOptionsMenu();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if (hasPrimaryAction) {
            menu.add(Menu.NONE, 0, Menu.NONE, primaryActionTitle).setActionView(primaryActionView).setOnMenuItemClickListener(primaryActionListener).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        }
        if (hasSecondaryAction) {
            menu.add(Menu.NONE, 1, Menu.NONE, secondaryActionTitle).setActionView(secondaryActionView).setOnMenuItemClickListener(secondaryActionListener).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        }
        return true;
    }
}

アクションバーのレイアウト:

<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/actionBarBg"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:elevation="4dp"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/actionBarBg"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:titleEnabled="false">

        <FrameLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:fitsSystemWindows="true"
            app:layout_collapseMode="parallax" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/action_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="?attr/actionBarSize"
            android:elevation="4dp"
            app:layout_collapseMode="pin"
            android:visibility="gone">

            <TextView
                android:id="@+id/action_bar_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@style/TextAppearance.Widget.AppCompat.Toolbar.Title"
                android:layout_gravity="left"
                android:visibility="gone"/>

            <ImageView
                android:id="@+id/search_icon"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="right"
                android:layout_marginLeft="@dimen/navigation_icons_margin_left"
                android:layout_marginRight="@dimen/navigation_icons_margin_right"
                android:background="@drawable/search_icon_dark_bg"
                android:visibility="gone" />

        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
4

1 に答える 1

0

これを試して :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent_cart"
    android:layout_width="55dp"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:paddingRight="5dp"
    android:layout_gravity="right">
  <ImageView
        android:id="@+id/navbar_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/home"
        android:paddingBottom="10dp"
        android:paddingLeft="5dp"
        android:layout_marginTop="20dp"
        android:paddingTop="15dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="10dp" />

<TextView
        android:id="@+id/nom_product"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:background="@drawable/red_circle"
        android:gravity="center"
        android:layout_margin="10dp"
        android:text="0"
        android:textColor="@color/white"
        android:layout_centerHorizontal="true" />

    </RelativeLayout>

赤丸:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <solid android:color="@color/colorPrimaryDark" />

    <size
        android:height="20dp"
        android:width="20dp" />



</shape>
于 2016-11-07T12:52:02.230 に答える