Android以编程方式设置材料按钮的顶部和底部(Java)

时间:2019-04-14 02:54:55

标签: android button material

我以编程方式创建了一个材质按钮,我希望它在屏幕底部,就像完全填充底部一样,但是问题在于默认的底部插图会产生明显的底部空白。

只需使用

即可轻松删除XML中的材料按钮的插入

android:insetLeft android:insetRight android:insetTop android:insetBottom

但是我的问题是如何以编程方式设置插入值。

我发现下面的链接对于了解材料按钮非常有用 https://github.com/material-components/material-components-android/blob/master/docs/components/MaterialButton.md

3 个答案:

答案 0 :(得分:2)

支持以编程方式设置顶部和底部插入已在 material-components-1.3.0-alpha03

中实现

在 Kotlin 中,您可以:

val materialButton = MaterialButton(ctx)
materialButton.insetTop = 0
materialButton.insetBottom = 0

答案 1 :(得分:1)

我也努力寻找解决方案。找到了。您需要为按钮创建一个没有插入样式的样式,然后在您的应用主题的materialButtonOutlinedStyle属性中对其进行定义。不要忘记在MaterialButton ctor中指定这样的属性。像这样:

styles.xml:

<style name="AppTheme" parent="Theme.MaterialComponents" >
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    < ... />
    <!-- The following defines the OutlinedButton style with your custom attrs -->
    <item name="materialButtonOutlinedStyle">@style/Widget.MaterialComponents.Button.OutlinedButton.NoInsets</item>
</style>

<style name="Widget.MaterialComponents.Button.OutlinedButton.NoInsets"
    parent="Widget.MaterialComponents.Button.OutlinedButton" >
    <!-- Here you can customize the drawable insets! -->
    <item name="android:insetTop">0dp</item>
    <item name="android:insetBottom">0dp</item>
</style>

活动/代码/任何Java语言:

private void addButtons() {
    MaterialButtonToggleGroup buttonGroup = findViewById(R.id.preference_selection_button_group);
    final ViewGroup.LayoutParams lp = new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
    );

    final int n = mEntries.length;
    for (int i = 0; i < n; i++)
        buttonGroup.addView(createChoiceButton(i, mEntries[i]), i, lp);
}

private View createChoiceButton(int index, CharSequence entry) {
    final MaterialButton button = new MaterialButton(
            getContext(), 
            null, 
            R.attr.materialButtonOutlinedStyle /** which points to your new OutlinedButton theme **/);
    button.setId(index);
    button.setText(entry);
    return button;
}

布局:

<parentLayout ...>

    <com.google.android.material.button.MaterialButtonToggleGroup
        android:id="@+id/preference_selection_button_group"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:singleSelection="true"
        app:selectionRequired="true" />

</parentLayout>

此代码在垂直MaterialButtonToggleGroup中使用,结果如下:

enter image description here

答案 2 :(得分:0)

据我所知,在MaterialButton源代码中没有公共方法来设置插图:

https://github.com/material-components/material-components-android/blob/master/lib/java/com/google/android/material/button/MaterialButtonHelper.java

因此,您需要复制源并添加类似setInsets()方法的内容。 检查下面的此链接,这是与您类似的问题: How to Change InsetDrawable Inset value after creation