我有一个LinearLayout,可以在其中以编程方式放置按钮。一开始,内部有一个按钮,用于添加新的过滤器按钮。 XML如下:
<LinearLayout
android:id="@+id/filterContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:orientation="horizontal">
<com.google.android.material.button.MaterialButton
android:id="@+id/addFilterButton"
style="@style/iconButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/ic_filter_list_icon_color" />
</LinearLayout>
如果按下过滤器按钮,则可以添加新的过滤器。像这样将其中的LinearLayout添加到ViewGroup:
private void addButtonForFilter(ResultFilter filter) {
MaterialButton newFilter = new MaterialButton(mFilterBoxViewGroup.getContext(),
null, R.attr.materialButtonStyle);
newFilter.setText(FilterStringProvider.getLabel(mFilterBoxViewGroup.getContext(), filter));
newFilter.setLayoutParams(mParameters);
newFilter.setOnClickListener(this);
newFilter.setTag(filter.getFilterType());
mFilterBoxViewGroup.addView(newFilter);
}
这里按钮显示在标准材料设计中。现在,我想将其更改为特定样式。
<style name="textButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="backgroundTint">@color/colorActionbarTabs</item>
<item name="android:textColor">@color/itemColor</item>
<item name="android:textSize">@dimen/item_standard_text_size</item>
<item name="android:clipToPadding">false</item>
</style>
如果我更改了上面代码的构造函数中的样式,则该按钮未按预期显示:
MaterialButton newFilter = new MaterialButton(mFilterBoxViewGroup.getContext(),
null, R.style.textButton);
即使新样式将MaterialButton作为父级,按钮现在也没有填充显示,而我无法找出导致此现象的原因。有任何想法吗?
MaterialButton
的构造函数是:
MaterialButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr)
3rd参数是defStyleAttr
,它是您的app主题中定义的属性,它是not样式。
例如R.attr.materialButtonStyle
:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<item name="materialButtonStyle">@style/Widget.MaterialComponents.Button</item>
</style>
[使用1.1.0
和1.2.0-beta01
定义了三个内置属性:
<item name="materialButtonStyle">@style/Widget.MaterialComponents.Button</item>
<item name="materialButtonOutlinedStyle">@style/Widget.MaterialComponents.Button.OutlinedButton</item>
<item name="borderlessButtonStyle">@style/Widget.MaterialComponents.Button.TextButton</item>
1.3.0-alpha01
引入了新的属性:
<item name="buttonBarButtonStyle">@style/Widget.MaterialComponents.Button.TextButton</item>
您可以在应用程序主题中使用这些属性之一来覆盖它们:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<item name="buttonBarButtonStyle">@style/textButton</item>
</style>
然后使用:
MaterialButton newFilter = new MaterialButton(mFilterBoxViewGroup.getContext(),
null, R.attr.buttonBarButtonStyle);