我使用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);
}
});
答案 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
课程,如果您尝试在setIcon
上AddFloatingActionButton
,则会抛出异常,这就是原因。我还添加了一个方法来更新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)。