【发布时间】: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