向右切换TextInputLayout Android

时间:2018-11-19 16:51:21

标签: android xml layout switch-statement

我想在TextInputLayout上放置一个Switch开关,在TextInput上使用match_parent参数,并留有空白。

将开关置于左侧似乎可行,但是在将其置于右侧时隐藏。

请参见下面的两个图像:

Switch to the left

Switch to the right

如您所见,开关将自己放置错误。

这是我的XML代码。主要布局是CoordinatorLayout:

                    <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 个答案:

答案 0 :(得分:1)

您在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>

答案 1 :(得分:1)

layout_width中的TextInputLayout更改为0dp,并向其中添加此属性:

android:layout_weight="1"

现在正在发生的事情是您的TextInputLayout的宽度为match_parent。这将填充父对象的整个剩余空间(这对于LinearLayout来说是唯一的)。当您的Switch位于左侧时,将为其留出足够的空间,然后TextInputLayout占据其余空间。但是,当Switch位于右侧时,TextInputLayout首先占据所有空间!

使用权重将确保 other 组件获得所需的空间 加权组件获得多余的空间。

答案 2 :(得分:1)

我建议您使用RelativeLayout而不是LinearLayout,甚至最好在ConstraintLayout中重做整个布局。

RelativeLayout实现可能是这样的

                <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>