如何将图标设置为getbase FloatingActionsMenu

时间:2016-04-25 10:54:47

标签: android

我使用com.getbase.floatingactionbutton.FloatingActionsMenu进行扩展FAB。但无法在fab菜单上设置图标。我尝试过set set drawable,但没有工作。 谢谢

         <FrameLayout
              android:id="@+id/frame_layout"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="@color/white_overlay">

         <com.getbase.floatingactionbutton.FloatingActionsMenu
             android:id="@+id/fab_menu"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="right|bottom"
             fab:fab_addButtonColorNormal="#C0007D"
             fab:fab_addButtonColorPressed="#C0007D"
             fab:fab_addButtonStrokeVisible="true"
             fab:fab_addButtonSize="normal"
             fab:fab_icon="@drawable/main_logo"
             fab:fab_labelStyle="@style/menu_labels_style"
             fab:fab_labelsPosition="left">



        <com.getbase.floatingactionbutton.FloatingActionButton
            android:id="@+id/locate_store"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            fab:fab_colorNormal="#C0007D"
            fab:fab_colorPressed="#C0007D"
            fab:fab_icon="@drawable/locate_store"
            fab:fab_size="mini"
            fab:fab_title="Locate Store" />

    </com.getbase.floatingactionbutton.FloatingActionsMenu>
</FrameLayout>

这是我的Java类代码,

        final FloatingActionsMenu fabMenu = (FloatingActionsMenu)         v.findViewById(R.id.fab_menu);

        fabMenu.setOnFloatingActionsMenuUpdateListener(new FloatingActionsMenu.OnFloatingActionsMenuUpdateListener() {
        @Override
        public void onMenuExpanded() {
            frameLayout.getBackground().setAlpha(240);
            frameLayout.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    fabMenu.collapse();
                    return true;
                }
            });
        }

        @Override
        public void onMenuCollapsed() {
            frameLayout.getBackground().setAlpha(0);
            frameLayout.setOnTouchListener(null);
        }
    });

2 个答案:

答案 0 :(得分:2)

我提出了一个可能的解决方案。它不是通用的,但它符合我的需要。如果您认为这不是您所需要的,我认为这是一个很好的继续。

所以我做的是分叉库futuresimple/android-floating-action-button。您需要在settings.gradle文件中添加库并包含库include ':library'。然后在build.gradle文件中删除:

dependencies {
    compile 'com.getbase:floatingactionbutton:1.10.1'
}

我从项目中添加了库:

dependencies {
    compile project(':library')
}

然后在FloatingActionsMenu课程中,我将private AddFloatingActionButton mAddButton;替换为private FloatingActionButton mAddButton;。如果您在第59行检查AddFloatingActionButton课程,如果您尝试在setIconAddFloatingActionButton,则会抛出异常,这就是原因。我还添加了一个方法来更新icon,colorNormal和colorPressed:

public void setMenuButton(int myIcon, int myColorNormal, int myColorPressed) {
        mAddButton.setIcon(myIcon);
        mAddButtonColorNormal = myColorNormal;
        mAddButton.setColorNormalResId(mAddButtonColorNormal);
        mAddButtonColorPressed = myColorPressed;
        mAddButton.setColorPressed(mAddButtonColorPressed);
    }

该方法的作用是简单地调用FloatingActionButton类上更新按钮的所有预定义方法。

下一步在布局文件(.xml)中从库中获取代码示例中创建一个菜单按钮:

<com.getbase.floatingactionbutton.FloatingActionsMenu
    android:id="@+id/multiple_actions"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_marginBottom="16dp"
    android:layout_marginEnd="16dp"
    android:layout_marginRight="16dp"
    fab:fab_addButtonColorNormal="@color/white"
    fab:fab_addButtonColorPressed="@color/white_pressed"
    fab:fab_addButtonPlusIconColor="@color/half_black"
    fab:fab_labelStyle="@style/menu_labels_style">

然后我选择在*.java文件中以编程方式执行其余操作,但也可以在xml文件中定义部分,例如定义浮动按钮。我不会详细介绍您可以查看库示例目录。

所以在我的*.java文件中,我调用了我在中创建的菜单按钮 *.xml档案。

final FloatingActionsMenu menuMultipleActions = (FloatingActionsMenu) findViewById(R.id.multiple_actions);

然后,您可以创建任意数量的按钮,例如,以编程方式创建的一个按钮示例:

final FloatingActionButton actionA = new FloatingActionButton(getBaseContext());
        actionA.setTitle("Familie");
        actionA.setIcon(R.drawable.world_map);
        actionA.setSize(FloatingActionButton.SIZE_MINI);
        actionA.setColorNormalResId(R.color.red);
        actionA.setColorPressedResId(R.color.black_semi_transparent);
        actionA.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainMapView.this, "Action Description", Toast.LENGTH_SHORT).show();
                ((FloatingActionsMenu) findViewById(R.id.multiple_actions)).collapse();
                return;
            }
        });

此代码示例只是创建按钮,添加您选择定义的参数。根据需要添加任意数量的按钮。

然后,您需要执行的下一步是设置菜单按钮。代码示例:

menuMultipleActions.setMenuButton(R.drawable.icon2, R.color.blue, R.color.white_pressed);

然后最后一步是添加您之前创建的按钮。代码示例:

menuMultipleActions.addButton(actionA);

希望这可以帮助您并解决您的问题。根据我的研究,我发现其他人也创建了类似于同一个库的东西,但我现在找不到链接。如果你在网上搜索一下就可以找到它。

目前菜单按钮上的颜色没有正确更新但我正在处理它,如果我找到解决方案,我也会在这里更新答案。希望这有帮助,快乐编码。

答案 1 :(得分:1)

我宁愿建议使用仅从com.getbase.floatingactionbutton.FloatingActionsMenu派生的this库。

您可以使用FloatingActionMenu中的以下属性更改图标:

def getEditedAppName() {
    if (getCurrentFlavor().contains("test")) {
        return getAppName() + "(Test)";
    } else {
        return getAppName();
    }
}

但是,您可以使用父库的所有功能(com.getbase.floatingactionbutton.FloatingActionsMenu)。