代码之家  ›  专栏  ›  技术社区  ›  Vanhaeren Thomas

textinputlayout android右键切换

  •  -1
  • Vanhaeren Thomas  · 技术社区  · 5 年前

    我想在textinputlayout的右边放置一个开关,在textinput和边距上使用匹配的父参数。

    将开关置于左侧似乎可以工作,但当将其置于右侧时,它是隐藏的。

    请参见下面的两张图片:

    正如您所看到的,开关本身放置错误。

    这是我的XML代码。主布局是一个协调布局:

    <linearlayout
    android:layout_width=“匹配父级”
    android:layout_height=“包装内容”
    android:orientation=“垂直”>
    
    文本视图
    android:layout_width=“包装内容”
    android:layout_height=“包装内容”
    android:text=“社交网络”
    android:textpearance=“@style/base.textpearance.appcompat.medium”
    android:textcolor=“@color/colorprimary”
    android:textstyle=“bold”/>
    
    <线性布局
    android:layout_width=“匹配父级”
    android:layout_height=“match_parent”>
    
    <android.support.design.widget.textinputlayout
    style=“@style/widget.materialcomponents.textinputlayout.outlinedbox”
    android:layout_width=“匹配父级”
    android:layout_height=“包装内容”
    android:layout_marginend=“40dp”>
    
    <android.support.design.widget.text输入文本
    android:id=“@+id/myprofile\u谷歌”
    android:inputType=“文本电子邮件地址”
    android:layout_width=“匹配父级”
    android:textcolor=“@color/蓝色\u灰色\u 800”
    android:layout_height=“包装内容”
    android:hint=“谷歌+”/>
    
    </android.support.design.widget.textinputlayout>
    
    交换机
    android:layout_width=“包装内容”
    android:layout_height=“30dp”
    android:layout_gravity=“center_vertical”/>
    
    
    
    </linearlayout>
    
    </linearlayout>
    
    </linearlayout>
    < /代码> 
    
    

    请参见下面的两张图片:

    Switch to the left

    Switch to the right

    正如你所看到的,开关把自己放错了位置。

    这是我的XML代码。主布局为协调布局:

                        <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">
    
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="Social Networks"
                            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
                            android:textColor="@color/colorPrimary"
                            android:textStyle="bold" />
    
                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="match_parent">
    
                            <android.support.design.widget.TextInputLayout
                                style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:layout_marginEnd="40dp">
    
                                <android.support.design.widget.TextInputEditText
                                    android:id="@+id/myprofile_google"
                                    android:inputType="textEmailAddress"
                                    android:layout_width="match_parent"
                                    android:textColor="@color/blue_grey_800"
                                    android:layout_height="wrap_content"
                                    android:hint="Google +" />
    
                            </android.support.design.widget.TextInputLayout>
    
                            <Switch
                                android:layout_width="wrap_content"
                                android:layout_height="30dp"
                                android:layout_gravity="center_vertical"/>
    
    
    
                        </LinearLayout>
    
                    </LinearLayout>
    
                </LinearLayout>
    
    3 回复  |  直到 5 年前
        1
  •  1
  •   Ben P.    5 年前

    改变 layout_width 你的 TextInputLayout 0dp ,并向其添加此属性:

    android:layout_weight="1"
    

    现在的情况是,textinputlayout的宽度为 match_parent . 这只会填满整个 剩下的 父对象的空间(这在线性布局中有点独特)。当你 Switch 在左边,它有足够的空间容纳它,然后textinputlayout占据其余部分。但是,当开关位于右侧时,textinputlayout首先占用所有空间!

    相反,使用重量可以确保 其他 组件获得所需的空间 之前 加权分量得到额外的空间。

        2
  •  1
  •   davy307    5 年前

    XML中缺少两位。 首先,线性布局上包含输入布局和开关的方向。其次,使用权重显示两个项目,因为您已经指定了文本输入布局应该与父级匹配(在本例中填充视图宽度)。

    此布局生成所需的输出:

    <?xml version="1.0" encoding="utf-8"?>
    
        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Social Networks"
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
                android:textColor="@color/colorPrimary"
                android:textStyle="bold" />
    
            <LinearLayout
                android:layout_width="match_parent"
                android:orientation="horizontal"
                android:layout_height="match_parent">
    
                <android.support.design.widget.TextInputLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:layout_marginEnd="40dp">
    
                    <android.support.design.widget.TextInputEditText
                        android:id="@+id/myprofile_google"
                        android:inputType="textEmailAddress"
                        android:layout_width="match_parent"
                        android:textColor="@android:color/holo_red_dark"
                        android:layout_height="wrap_content"
                        android:hint="Google +" />
    
                </android.support.design.widget.TextInputLayout>
    
                <Switch
                    android:layout_width="wrap_content"
                    android:layout_height="30dp"
                    android:layout_gravity="center_vertical"/>
    
    
    
            </LinearLayout>
    
        </LinearLayout>
    
        3
  •  1
  •   alessandro gaboardi    5 年前

    我建议您使用relativelayout而不是linearlayout,或者更好地在constraintlayout中重做整个布局。

    相对布局实现可能是这样的

                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">
    
                        <android.support.design.widget.TextInputLayout
                            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
                            android:id="@+id/textInputLayout"
                            android:layout_toStartOf="@+id/switch"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginEnd="40dp">
    
                            <android.support.design.widget.TextInputEditText
                                android:id="@+id/myprofile_google"
                                android:inputType="textEmailAddress"
                                android:layout_width="match_parent"
                                android:textColor="@color/blue_grey_800"
                                android:layout_height="wrap_content"
                                android:hint="Google +" />
    
                        </android.support.design.widget.TextInputLayout>
    
                        <Switch
                            android:id="@+id/switch"
                            android:layout_width="wrap_content"
                            android:layout_height="30dp"
                            android:layout_alignParentEnd="true"
                            android:layout_gravity="center_vertical"/>
    
    
    
                    </LinearLayout>