在 Android 中以编程方式创建包含具有自定义样式的 MaterialButton 的 MaterialButtonToggleGroup
Create MaterialButtonToggleGroup including MaterialButton(s) with customized style programmatically in Android
我正在尝试创建一个带有 material 按钮的 MaterialButtonToggleGroup,我想使用自定义样式来实现。
我能够使用 xml 创建它,但是,我需要以编程方式实现相同的结果
这是我对 xml 所做的(我使用 LinearLayout 作为根视图):
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/group_item_size"
style="@style/ButtonsToggleGroupStyle"
>
<com.google.android.material.button.MaterialButton
style="@style/ButtonStyle"
android:text="Small"
/>
<com.google.android.material.button.MaterialButton
style="@style/ButtonStyle"
android:text="Large"
/>
<com.google.android.material.button.MaterialButton
style="@style/ButtonStyle"
android:text="Family"
/>
</com.google.android.material.button.MaterialButtonToggleGroup>
以及样式代码:
<style name="ButtonStyle" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="cornerRadius">@dimen/margin_20dp</item>
<item name="android:padding">@dimen/margin_8dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_weight">1</item>
<item name="android:textSize">@dimen/text_size_14sp</item>
<item name="android:textAllCaps">false</item>
<item name="android:textColor">@drawable/drawable_button_toggle_group_text_selector</item>
<item name="android:backgroundTint">@drawable/drawable_button_toggle_group_selector</item>
</style>
<style name="ButtonsToggleGroupStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">center</item>
<item name="android:orientation">horizontal</item>
<item name="android:layout_marginStart">@dimen/margin_32dp</item>
<item name="android:layout_marginTop">@dimen/margin_12dp</item>
<item name="android:layout_marginEnd">@dimen/margin_32dp</item>
</style>
提前感谢您的帮助
只需使用 xml 布局 (single_button_layout.xml
) 来定义具有您喜欢的样式的单个 MaterialButton
:
<com.google.android.material.button.MaterialButton
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/ButtonStyle"
.../>
然后使用类似的东西:
MaterialButtonToggleGroup group = findViewById(R.id.toggle_button_group);
for (....){
MaterialButton button =
(MaterialButton) getLayoutInflater().inflate(R.layout.single_button_layout, group, false);
button.setText(...);
group.addView(button);
}
要以编程方式完成这一切,您可以按如下方式编写骨架代码:
MaterialButtonToggleGroup charpathButtongroup = new MaterialButtonToggleGroup(this, null, R.attr.materialButtonOutlinedStyle);
MaterialButton pathButton[] = new MaterialButton[2];
pathButton[0] = new MaterialButton(this, null, R.attr.materialButtonOutlinedStyle);
pathButton[1] = new MaterialButton(this, null, R.attr.materialButtonOutlinedStyle);
FrameLayout.LayoutParams charpathgroupParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
charpathButtongroup.setLayoutParams(charpathgroupParams);
game.addView(charpathButtongroup);
charpathButtongroup.addView(pathButton[0]);
charpathButtongroup.addView(pathButton[1]);
在向 MaterialButtonToggleGroup 添加视图之前,请务必为其设置适当的参数,否则您将遇到以下异常:
java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
可以通过编程方式将属性添加到 LayoutParams 和 MaterialButtons:
我更喜欢以编程方式为我的 MMORG 游戏做所有事情,没有布局文件夹。
我正在尝试创建一个带有 material 按钮的 MaterialButtonToggleGroup,我想使用自定义样式来实现。
我能够使用 xml 创建它,但是,我需要以编程方式实现相同的结果
这是我对 xml 所做的(我使用 LinearLayout 作为根视图):
<com.google.android.material.button.MaterialButtonToggleGroup
android:id="@+id/group_item_size"
style="@style/ButtonsToggleGroupStyle"
>
<com.google.android.material.button.MaterialButton
style="@style/ButtonStyle"
android:text="Small"
/>
<com.google.android.material.button.MaterialButton
style="@style/ButtonStyle"
android:text="Large"
/>
<com.google.android.material.button.MaterialButton
style="@style/ButtonStyle"
android:text="Family"
/>
</com.google.android.material.button.MaterialButtonToggleGroup>
以及样式代码:
<style name="ButtonStyle" parent="Widget.MaterialComponents.Button.UnelevatedButton">
<item name="cornerRadius">@dimen/margin_20dp</item>
<item name="android:padding">@dimen/margin_8dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_weight">1</item>
<item name="android:textSize">@dimen/text_size_14sp</item>
<item name="android:textAllCaps">false</item>
<item name="android:textColor">@drawable/drawable_button_toggle_group_text_selector</item>
<item name="android:backgroundTint">@drawable/drawable_button_toggle_group_selector</item>
</style>
<style name="ButtonsToggleGroupStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_gravity">center</item>
<item name="android:orientation">horizontal</item>
<item name="android:layout_marginStart">@dimen/margin_32dp</item>
<item name="android:layout_marginTop">@dimen/margin_12dp</item>
<item name="android:layout_marginEnd">@dimen/margin_32dp</item>
</style>
提前感谢您的帮助
只需使用 xml 布局 (single_button_layout.xml
) 来定义具有您喜欢的样式的单个 MaterialButton
:
<com.google.android.material.button.MaterialButton
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/ButtonStyle"
.../>
然后使用类似的东西:
MaterialButtonToggleGroup group = findViewById(R.id.toggle_button_group);
for (....){
MaterialButton button =
(MaterialButton) getLayoutInflater().inflate(R.layout.single_button_layout, group, false);
button.setText(...);
group.addView(button);
}
要以编程方式完成这一切,您可以按如下方式编写骨架代码:
MaterialButtonToggleGroup charpathButtongroup = new MaterialButtonToggleGroup(this, null, R.attr.materialButtonOutlinedStyle);
MaterialButton pathButton[] = new MaterialButton[2];
pathButton[0] = new MaterialButton(this, null, R.attr.materialButtonOutlinedStyle);
pathButton[1] = new MaterialButton(this, null, R.attr.materialButtonOutlinedStyle);
FrameLayout.LayoutParams charpathgroupParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
charpathButtongroup.setLayoutParams(charpathgroupParams);
game.addView(charpathButtongroup);
charpathButtongroup.addView(pathButton[0]);
charpathButtongroup.addView(pathButton[1]);
在向 MaterialButtonToggleGroup 添加视图之前,请务必为其设置适当的参数,否则您将遇到以下异常:
java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
可以通过编程方式将属性添加到 LayoutParams 和 MaterialButtons:
我更喜欢以编程方式为我的 MMORG 游戏做所有事情,没有布局文件夹。