以编程方式创建FloatingActionButton(不带xml)

sla*_*tir 5 xml inheritance android floating-action-button

我很欣赏Android的FloatingActionButton(fab)功能,并希望在我的项目中的许多不同地方使用它们。

现在,我有类似这样的内容,其中有几个针对它们的xml规范,除了id,icon和onclick外,其他所有规范都是相同的。

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fabFoo"
    android:onClick="onFabFoo"
    android:src="@drawable/ic_foo" 
    app:backgroundTint="?attr/colorButtonNormal"
    app2:elevation="2dp"
    app:fabSize="mini" 
    android:focusable="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_margin="2dp"
    app:rippleColor="?attr/colorSwitchThumbNormal" />
Run Code Online (Sandbox Code Playgroud)

为了避免重复代码...有没有一种方法可以完全以编程方式创建fab,而无需在xml中指定它?

...

试用一些建议...在我将SDK升级到最新版本之前,没有“ setSize”(#25)

FloatingActionButton fab = new FloatingActionButton(this);
fab.setId(View.generateViewId());
fab.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
      Log.d("DEBUG", "onFabFoo");
   }
});
fab.setImageResource(R.drawable.ic_foo);
fab.setElevation(2);
fab.setSize(android.support.design.widget.FloatingActionButton.SIZE_MINI);
fab.setFocusable(true);
RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT);
lay.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
lay.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
lay.setMargins(2,2,2,2);
fab.setLayoutParams(lay);
Run Code Online (Sandbox Code Playgroud)

现在还没有想出如何设置颜色

//  app:backgroundTint="?attr/colorButtonNormal"
//  app:rippleColor="?attr/colorSwitchThumbNormal"
Run Code Online (Sandbox Code Playgroud)

我看到有一些方法可以设置这些颜色(setBackgroundTintList和setRippleColor),但是我看不到如何将其设置为我在原始xml设置中选择的颜色(colorButtonNormal和colorSwitchThumbNormal)

另外,不知道如何将其附加到父项上并显示出来...

好吧,我想我现在意识到,如果你做这一切的程序,那么你就不能使用的功能,如Android Studio中的XML设计视图。因此,工作起来要困难得多。

Shr*_*yak 5

有两个我能想到的

只用java

创建FloatingActionButton直接在代码一样

public FloatingActionButton getFab(Context context) {
    FloatingActionButton fab = new FloatingActionButton(context);
    ...
    return fab;
}
Run Code Online (Sandbox Code Playgroud)

扩大布局

public FloatingActionButton getFab(Context context, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(context);
    return (FloatingActionButton) inflater.inflate(R.layout.myfab, parent, false);
}
Run Code Online (Sandbox Code Playgroud)

更多关于吹气

编辑:

您可以使用setBackgroundTintListsetRippleColor设置2个属性。

并把它安装到家长,你做

layout.addView(v);
Run Code Online (Sandbox Code Playgroud)

但我觉得用LayoutInflater更好,因为它产生FloatingActionButton并将其连接到其母公司的两个任务。

inflater.inflate(R.layout.myfab, layout, true)
Run Code Online (Sandbox Code Playgroud)

  • 布局只是一个ViewGroup。因此,无论您使用哪种布局(LinearLayout,RelativeLayout等),都可以使用。对要放置此FAB的布局执行“ findViewById”,然后将其类型转换为ViewGroup。示例-`vg =(ViewGroup)findViewById(...)` (2认同)