我有一个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>
如果按下过滤器按钮,则可以添加新的过滤器。在ViewGroup中添加了这样的LinearLayout:
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作为父级,并且我也无法找出导致此行为的原因。有任何想法吗?
答案 0 :(得分:1)
MaterialButton
的构造函数为:
MaterialButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr)
第3 个参数是 defStyleAttr
,它是在应用主题中定义的属性 ,它是不是样式。
例如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
定义了3个内置属性:
<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);