我创建了一个EditText样式:
<style name="EditModeTextEdit">
<item name="android:textColor">@color/edittext_textcolor</item>
<item name="android:textSize">@dimen/edittext_textsize</item>
<item name="android:textStyle">bold</item>
<item name="android:enabled">true</item>
<item name="android:focusable">true</item>
<item name="android:background">@drawable/textedit_border</item>
<item name="android:layout_margin">@dimen/form_margin</item>
</style>
当我用XML应用它时看起来很好:
<EditText
android:id="@+id/my_acc_edit_tel_et"
style="@style/EditModeTextEdit"
android:singleLine="true"
custom:layout_gravity="fill_horizontal"
/>
当我在代码中执行相同操作时,我会看到奇怪的视觉效果。取决于我使用的构造函数。
显示常规edittext组件
EditText et = new EditText(new ContextThemeWrapper(mCtx, R.style.EditModeTextEdit));
显示样式化组件,但无法与edittext交互(键盘不显示)
EditText et = new EditText(new ContextThemeWrapper(mCtx, R.style.EditModeTextEdit), 0, null);
我目前不得不使用EditText设置方法手动设置每个元素:
protected EditText createEditText(String defaultText, String uiTag)
{
GridLayout.LayoutParams lp = createDefaultGridParams();
lp.setGravity(Gravity.FILL_HORIZONTAL);
lp.width = 250;
EditText et = new EditText(mCtx);
et.setTextColor(getResources().getColor(R.color.edittext_textcolor));
et.setBackgroundResource(R.drawable.textedit_border);
et.setTag(uiTag);
et.setText(defaultText);
et.setSingleLine(true);
et.setLayoutParams(lp);
return et;
}
任何人都知道为什么会这样吗?
答案 0 :(得分:1)
你可能会走另一条路。您可以使用指定的样式创建模板布局xml文件,例如在res/layout
创建ev_template.xml
中,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<EditText
android:id="@+id/my_acc_edit_tel_et"
style="@style/EditModeTextEdit"
android:singleLine="true"
custom:layout_gravity="fill_horizontal"/>
然后将其膨胀到新的EditText:
EditText et = (EditText) LayoutInflater.from(mCtx).inflate(R.layout.ev_template, null);
答案 1 :(得分:0)
public EditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
attrs
包含所有attrs,defStyle
包含所有attr值。你将0和null放在其中。所以你不能得到attr。