【问题标题】:How to make custom EditText [duplicate]如何制作自定义EditText [重复]
【发布时间】:2018-01-24 13:17:36
【问题描述】:

我正在尝试自定义EditText 看起来像这样。 目前我正在使用来自ConstraintLayout的自定义视图继承

DefaultEditTextContainerView.java

public class DefaultEditTextContainerView extends ConstraintLayout
{
        @BindView(R.id.titleText)
        public TextView titleText;
        @BindView(R.id.contentEditText)
        public EditText contentEditText;

        private String mTitleText;
        private String mHintText;


        public DefaultEditTextContainerView(Context context) {
                super(context);
                init(null, 0);
        }

        public DefaultEditTextContainerView(Context context, AttributeSet attrs) {
                super(context, attrs);
                init(attrs, 0);

        }

        public DefaultEditTextContainerView(Context context, AttributeSet attrs, int defStyleAttr) {
                super(context, attrs, defStyleAttr);
                init(attrs, defStyleAttr);

        }


        private void init(AttributeSet attrs, int defStyle) {
                View view = inflate(getContext(), R.layout.view_default_edit_text_container_view,
                        this);
                ButterKnife.bind(this, view);

                //region Load attributes
                final TypedArray typedArray = getContext().obtainStyledAttributes(
                        attrs, R.styleable.DefaultEditTextContainerView, defStyle, 0);

                if (typedArray.hasValue(R.styleable.DefaultEditTextContainerView_titleText)) {
                        mTitleText = typedArray.getString(
                                R.styleable.LandingPageSectionItemView_titleText);
                }

                if (typedArray.hasValue(R.styleable.DefaultEditTextContainerView_hintText)) {
                        mHintText = typedArray.getString(
                                R.styleable.DefaultEditTextContainerView_hintText);
                }


                typedArray.recycle();
                // endregion


                titleText.setText(mTitleText);
                contentEditText.setHint(mHintText);
        }



}

view_default_edit_text_container_view.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:maxHeight="100dp">


    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginBottom="24dp"
        android:background="@color/colorLight"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout10"/>


    <TextView
        android:id="@+id/titleText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="필드 이름"
        android:textColor="@color/textLightDark"
        android:textSize="12sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <LinearLayout
        android:id="@+id/linearLayout10"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/titleText">

        <EditText
            android:id="@+id/contentEditText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:ems="10"
            android:hint="예) 힌트 텍스트"
            android:inputType="text"
            android:padding="10dp"
            android:singleLine="true"
            android:textColor="@color/textLightDark"
            android:textColorHint="@color/colorLight"
            android:textSize="18sp"
            tools:layout_editor_absoluteX="99dp"
            tools:layout_editor_absoluteY="271dp"/>
    </LinearLayout>
</android.support.constraint.ConstraintLayout>

但问题是,我必须访问分配给 EditText 的超过 5 个属性。所以我认为我的 CustomView 应该继承自 EditText。这就是我想要做的......

如何从 EditText 继承并创建与上面相同的外观视图?

如何从 xml 访问所有 EditText 属性,而不是通过 attr.xml 指定和覆盖属性...

谢谢!

===编辑== 我想要什么

ParentView(ConstraintLayout)
- ViewA(TextView)
- ViewB(EditText)

想让视图看起来像那样,但继承自 ViewB(EditText) 所以我主要可以访问EditText的属性

【问题讨论】:

  • @ADM 这只是一个例子。我不想做 TextInputLayout 的事情......
  • 所以我想我没有得到你的例子。你到底想要什么?你能添加预期的输出吗(请用英文)。
  • @ADM 编辑了我的帖子

标签: android android-edittext attributes android-custom-view


【解决方案1】:

从显示所需结果的模型中,您可能希望这个库可以轻松实现:https://github.com/HITGIF/TextFieldBoxes.I 以前使用过这个库,它很容易实现。

这是库提供的输出预览:

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 2019-04-13
    • 1970-01-01
    • 2018-08-02
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多