【发布时间】:2021-04-06 03:47:04
【问题描述】:
我正在尝试覆盖条纹的 xml 以在框架布局内水平显示 Edittext
这是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<com.stripe.android.view.CardBrandView
android:id="@+id/card_brand_view"
android:layout_width="@dimen/card_brand_view_width"
android:layout_height="@dimen/card_brand_view_height"
android:layout_marginTop="@dimen/stripe_card_icon_padding"
android:layout_marginBottom="@dimen/stripe_card_icon_padding"
android:layout_marginEnd="@dimen/stripe_card_icon_padding"
/>
<FrameLayout
android:id="@+id/container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:layout_gravity="center_vertical"
>
<!-- The accessibilityTraversalBefore attribute is ignored in sdk < 22 -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/card_number_text_input_layout"
android:labelFor="@id/card_number_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:visibility="visible"
android:background="@android:color/transparent"
tools:ignore="UnusedAttribute"
android:accessibilityTraversalBefore="@+id/text_input_expiry_date"
android:nextFocusRight="@+id/text_input_expiry_date"
android:nextFocusForward="@+id/text_input_expiry_date"
android:nextFocusDown="@+id/text_input_expiry_date"
android:contentDescription="@string/acc_label_card_number"
android:accessibilityLiveRegion="polite"
app:hintEnabled="false"
style="@style/Stripe.CardInputWidget.TextInputLayout">
<com.stripe.android.view.CardNumberEditText
android:id="@+id/card_number_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:imeOptions="actionNext"
android:hint="@string/card_number_hint"
style="@style/Stripe.CardInputWidget.EditText"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/expiry_date_text_input_layout"
android:labelFor="@id/expiry_date_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/stripe_card_expiry_initial_margin"
android:layout_gravity="start"
android:visibility="visible"
android:background="@android:color/transparent"
tools:ignore="UnusedAttribute"
android:accessibilityTraversalBefore="@+id/text_input_cvc"
android:accessibilityTraversalAfter="@+id/text_input_card_number"
android:nextFocusRight="@+id/text_input_cvc"
android:nextFocusForward="@+id/text_input_cvc"
android:nextFocusDown="@+id/text_input_cvc"
android:nextFocusLeft="@id/text_input_card_number"
android:nextFocusUp="@id/text_input_card_number"
android:contentDescription="@string/acc_label_expiry_date"
android:accessibilityLiveRegion="polite"
app:hintEnabled="false"
style="@style/Stripe.CardInputWidget.TextInputLayout">
<com.stripe.android.view.ExpiryDateEditText
android:id="@+id/expiry_date_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:imeOptions="actionNext"
android:digits="@string/stripe_expiration_date_allowlist"
android:hint="@string/expiry_date_hint"
style="@style/Stripe.CardInputWidget.EditText"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/cvc_text_input_layout"
android:labelFor="@id/cvc_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/stripe_card_cvc_initial_margin"
android:layout_gravity="start"
android:background="@android:color/transparent"
tools:ignore="UnusedAttribute"
android:accessibilityTraversalAfter="@+id/text_input_expiry_date"
android:nextFocusLeft="@id/text_input_expiry_date"
android:nextFocusUp="@id/text_input_expiry_date"
android:contentDescription="@string/cvc_number_hint"
android:accessibilityLiveRegion="polite"
app:hintEnabled="false"
style="@style/Stripe.CardInputWidget.TextInputLayout">
<com.stripe.android.view.CvcEditText
android:id="@+id/cvc_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:imeOptions="actionDone"
style="@style/Stripe.CardInputWidget.EditText"
/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/postal_code_text_input_layout"
android:labelFor="@id/postal_code_edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_marginStart="@dimen/stripe_card_cvc_initial_margin"
android:layout_gravity="start"
android:background="@android:color/transparent"
tools:ignore="UnusedAttribute"
android:accessibilityTraversalAfter="@+id/text_input_cvc"
android:nextFocusLeft="@id/text_input_cvc"
android:nextFocusUp="@id/text_input_cvc"
android:contentDescription="@string/address_label_postal_code"
android:accessibilityLiveRegion="polite"
app:hintEnabled="false"
style="@style/Stripe.CardInputWidget.TextInputLayout">
<com.stripe.android.view.PostalCodeEditText
android:id="@+id/postal_code_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:imeOptions="actionDone"
android:enabled="false"
style="@style/Stripe.CardInputWidget.EditText"
/>
</com.google.android.material.textfield.TextInputLayout>
</FrameLayout>
</merge>
这是我从条带库中使用的代码,我正在尝试覆盖它,我的要求是使用 match_parent 将所有 editText 字段水平显示,并将 edittext 水平显示为 4 行
- 卡号
- CVC
- 到期日期
- 邮政编码
谢谢 问候
【问题讨论】:
-
我觉得如果要实现堆栈效果,最好使用LinearLayout或者RelativeLayout而不是FrameLayout。或者您可以使用 android:layout_gravity 进行框架布局,看看它是否符合您的需要