【发布时间】:2020-05-12 02:32:57
【问题描述】:
我正在尝试以编程方式应用 TextInputLayout 主题来创建一次自定义编辑文本并在任何地方使用它。
这是我的自定义编辑文本类:
package com.enjoyapps.weddingapp.view;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import androidx.appcompat.view.ContextThemeWrapper;
import com.enjoyapps.weddingapp.R;
import com.google.android.material.textfield.TextInputLayout;
public class CustomEditText extends TextInputLayout {
public CustomEditText(Context context) {
super(new ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox));
init();
}
public CustomEditText(Context context, AttributeSet attrs) {
// super(context, attrs);
super(new ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox), attrs);
init();
}
public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(new ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox), attrs, defStyleAttr);
init();
}
private void init() {
setBoxStrokeColor(Color.BLUE);
setBoxCornerRadii(50,50,50,50);
setBoxBackgroundColor(Color.BLUE);
}
}
如您所见,在 Constructor 中我设置了样式:
new ContextThemeWrapper(context, R.style.Widget_MaterialComponents_TextInputLayout_OutlinedBox)
当我将自定义编辑文本添加到 xml 时,它没有获得我在 init 方法中设置的属性。
但是当我在 xml 中应用相同的主题时,它正在工作并从 init 方法获取 all 属性。
<com.enjoyapps.weddingapp.view.CustomEditText
android:layout_width="300dp"
android:layout_centerInParent="true"
android:layout_height="50dp">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.enjoyapps.weddingapp.view.CustomEditText>
【问题讨论】:
-
如果某个答案对您有用,那么接受它很重要。它还会奖励你一些声望点!
标签: java android material-design