【发布时间】:2017-07-26 19:44:47
【问题描述】:
我很欣赏 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" />
为了避免重复代码...有没有办法完全以编程方式创建 fab 而无需在 xml 中指定?
...
尝试一些建议... 在我将 SDK 升级到当前版本 (# 25) 之前没有“setSize”
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);
还没想好怎么设置颜色
// app:backgroundTint="?attr/colorButtonNormal"
// app:rippleColor="?attr/colorSwitchThumbNormal"
我看到有设置这些的方法(setBackgroundTintList 和 setRippleColor),但我不知道如何将其设置为我在原始 xml 设置中选择的颜色(colorButtonNormal 和 colorSwitchThumbNormal)
另外,不知道如何将其附加到父级并使其显示...
好的,我想我现在意识到,如果您以编程方式完成所有这些操作,那么您将无法使用 Android Studio 中的 xml 设计视图之类的功能。所以工作起来要困难得多。
【问题讨论】:
-
考虑在 xml 中创建您的样式,然后应用该样式或使用辅助类以避免代码重复
-
@ShreyashSSarnayak 好的,我查看了文档。我看到至少一个无法以编程方式设置的属性——即 fabSize。所以我想我要推断出真正的答案是“不,你不能”?
-
@Stefan 谢谢Stefan,你的回答更有帮助。
-
您可以使用setSize 以编程方式设置大小,它不像您预期的那样命名为
setfabSize。
标签: android xml inheritance floating-action-button