【问题标题】:MaterialButtonToggleGroup child's MaterialButton layout_marginStart, layout_marginEnd not workingMaterialButtonToggleGroup 孩子的 MaterialButton layout_marginStart, layout_marginEnd 不起作用
【发布时间】:2023-03-07 03:22:01
【问题描述】:

如果我尝试使用 layout_marginStartlayout_marginEnd 添加边距,但对 UI 没有影响。我不确定为什么当我将 layout_marginStartlayout_marginEnd 添加为 MaterialButtonToggleGroup 的子级时,它们不能与 MaterialButton 一起使用/p>

 <com.google.android.material.button.MaterialButtonToggleGroup
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="@dimen/ten_dp"
                            app:singleSelection="true">

                            <com.google.android.material.button.MaterialButton
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginStart="@dimen/twentY"
                                app:icon="@drawable/ic_directions_walk_black_24dp" />

                            <com.google.android.material.button.MaterialButton
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginStart="@dimen/ten_dp"

                                app:icon="@drawable/ic_directions_car_black_24dp" />

                            <com.google.android.material.button.MaterialButton
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"

                                android:layout_marginStart="@dimen/ten_dp"
                                app:icon="@drawable/ic_directions_bus_black_24dp" />
                        </com.google.android.material.button.MaterialButtonToggleGroup>

【问题讨论】:

    标签: android material-design android-button material-components-android android-togglebutton


    【解决方案1】:

    经过几个小时的挣扎,我终于找到了干净的解决方案。 我们可以轻松地使用android:insetRightandroid:insetLeft 为材质按钮添加间距。

    这是每个按钮之间 10dp (5dp + 5dp) 间距的代码示例:

    <com.google.android.material.button.MaterialButtonToggleGroup
      android:id="@+id/toggleGroup"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">
    
      <com.google.android.material.button.MaterialButton
        android:id="@+id/button1"
        android:insetRight="5dp"
        ... />
    
      <com.google.android.material.button.MaterialButton
        android:id="@+id/button2"
        android:insetRight="5dp"
        android:insetLeft="5dp"
        ... />
    
      <com.google.android.material.button.MaterialButton
        android:id="@+id/button3"
        android:insetLeft="5dp"
        ... />
    
    </com.google.android.material.button.MaterialButtonToggleGroup>
    

    希望这对你也有帮助:)

    【讨论】:

    • 这完成了工作。谢谢
    • 如果有人使用方向vertical,那么按钮会提供自动间距,要删除按钮之间的空格,请使用android:insetBottom="0dp"android:insetTop="0dp"
    【解决方案2】:

    为了将多个按钮紧密地组合在一起, MaterialButtonToggleGroup 覆盖任何的开始和结束边距 子元素添加到此布局中,以便放置子按钮 直接相邻。

    抱歉,layout_marginStartlayout_marginEnd 在这里不起作用。阅读有关MaterialButtonToggleGroup 的官方指南。

    您可以尝试使用 ToggleButton

                      <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:gravity="center"
                        android:orientation="horizontal">
    
                            <ToggleButton
                                android:id="@+id/tJava"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:textOff="JAVA"
                                android:textOn="JAVA" />
    
                           <ToggleButton
                                android:id="@+id/tKotlin"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:textOff="KOTLIN"
                                android:textOn="KOTLIN" />
    
                    </LinearLayout>
    

    然后是 Java 类 onCreate() 部分

        tJava=findViewById(R.id.tJava);
        tKotlin=findViewById(R.id.tKotlin);
    
    
        tJava.setOnCheckedChangeListener(changeChecker);
        tKotlin.setOnCheckedChangeListener(changeChecker);
    

    然后changeChecker onCreate() 之外的函数

    CompoundButton.OnCheckedChangeListener changeChecker = new CompoundButton.OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked){
                    if (buttonView == tJava) {
    
                        tKotlin.setChecked(false);
    
                    }
                    if (buttonView == tKotlin) {
    
                        tJava.setChecked(false);
    
                    }
    
            }
        };
    

    【讨论】:

    • 您提供的解决方案没有按预期工作,一次应该只有一个按钮处于活动状态,但如果我试图将三个切换按钮放入无线电组,则不会发生这种情况。@IntelliJ Amiya
    • @Black4Guy 解决了吗?
    【解决方案3】:

    目前(1.2.0-beta011.3.0-alpha01)你不能这样做。
    正如@IntelliJ Amiya的回答所指出的那样:

    为了将多个按钮紧密地组合在一起,MaterialButtonToggleGroup覆盖添加到此布局的任何子按钮的开始和结束边距,以便子按钮彼此直接相邻放置。

    有一个解决方法(不是那么好,但它有效):

    <com.google.android.material.button.MaterialButtonToggleGroup>
    
       <com.google.android.material.button.MaterialButton
           style="?attr/materialButtonOutlinedStyle"
           app:strokeColor="@color/as_background"
           app:strokeWidth="2dp"
           android:textColor="@color/white"
           app:backgroundTint="@color/my_group_selector"
           ../>
    

    在您的MaterialButton 中使用与活动背景颜色相同的笔划。 strokeWidth wokrs like 一个边距。
    最后使用支持选中状态的选择器:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:alpha="1.00" android:color="?attr/colorPrimary" android:state_checked="true"/>
        <item android:alpha="0.30" android:color="?attr/colorPrimary" android:state_checked="false"/>
    </selector>
    

    【讨论】:

      猜你喜欢
      • 2021-06-12
      • 2020-02-01
      • 2021-05-16
      • 2015-11-03
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      相关资源
      最近更新 更多