2016-11-07 1 views
0

Я добавляю элементы меню действия в динамическую панель действий и потому, что мне нужен эффект «значка», я устанавливаю представления для элементов, а не только для рисования иконки. Моя проблема в том, что когда у меня есть элементы, которые имеют свои представления, они также выровнены по правому краю панели действий. Я хочу иметь какую-то вставку, но ничего не получается. Я попытался установить поля на макетах вида действия, установил вставки в XML и программно, но ничего не меняется. Кто-нибудь знает, как я могу это сделать, чтобы действия не появлялись прямо на краю?Android: действия, отображающиеся на правом краю при настройке вида действия вместо значка

Это то, что я вижу сейчас:

enter image description here

И я хочу, чтобы иметь какое-то обивку/маржу между иконой и правым краем панели действий, как на левой стороне между левый край и заголовок.

Вот код:

Вид из пунктов меню действий (Рез/макет/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> 

ответ

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> 
+0

Ого, я думал, что набивка бы испортить мое расположение, но это на самом деле работает без кладя значок! Благодаря! – hildegard

Смежные вопросы