EditText应用样式怪异的行为

时间:2015-11-13 15:34:44

标签: android

我创建了一个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;
}

任何人都知道为什么会这样吗?

2 个答案:

答案 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。