设置android:inputType="textPassword"失效的解决办法
2013-10-11 10:03
633 查看
正常情况下,直接用EditText,无论直接在前台和后台设置setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);是没问题的。
如果EditText在自定义控件中包含,并且同时设置其他属性的时候,需要注意顺序问题,setInputType需要放在setSingleLine后面,不知道算不算android的一个Bug。
下面是本人写的一个控件,默认是文本,点击变输入框。
如果EditText在自定义控件中包含,并且同时设置其他属性的时候,需要注意顺序问题,setInputType需要放在setSingleLine后面,不知道算不算android的一个Bug。
下面是本人写的一个控件,默认是文本,点击变输入框。
import java.util.Calendar; import android.app.Activity; import android.app.DatePickerDialog; import android.content.Context; import android.content.res.TypedArray; import android.text.InputFilter; import android.text.InputFilter.LengthFilter; import android.text.InputType; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.DatePicker; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import com.sharera.capitalcircle.R; /** * 可编辑文本框 * * @author Administrator * */ public class EditWithText extends LinearLayout { private TextView tv; private EditText et; private LinearLayout ll; private int inPutType; private Activity activity = new Activity(); private Calendar c = Calendar.getInstance(); // 标记是否能被编辑 private boolean isEditable = true; public void SetActivity(Activity activity) { this.activity = activity; } public EditWithText(Context context) { this(context, null); } public EditWithText(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.edit_with_text, this, true); tv = (TextView) findViewById(R.id.edit_with_text_t); et = (EditText) findViewById(R.id.edit_with_text_e); ll = (LinearLayout) findViewById(R.id.edit_with_text_layout); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.EditWithText); // 设置编辑框字 CharSequence text = a.getText(R.styleable.EditWithText_android_text); if (text != null) tv.setText(text); // 设置提示字 CharSequence hint = a.getText(R.styleable.EditWithText_android_hint); if (hint != null) tv.setHint(hint); // 设置内容位置 int gravity = a.getInt(R.styleable.EditWithText_android_gravity, -100); if (gravity != -100) { ll.setGravity(gravity); tv.setGravity(gravity); } // 设置最长度 int maxLength = a .getInt(R.styleable.EditWithText_android_maxLength, 25); InputFilter[] filters = { new LengthFilter(maxLength) }; et.setFilters(filters); // 设置字大小 String size = a.getString(R.styleable.EditWithText_android_textSize); if (size != null && size.length() > 0) { size = size.substring(0, size.length() - 2); et.setTextSize(TypedValue.COMPLEX_UNIT_SP, Float.valueOf(size)); tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, Float.valueOf(size)); } // 设置是否多行 Boolean isMulti = a.getBoolean( R.styleable.EditWithText_android_singleLine, true); et.setSingleLine(isMulti); // 设置内容类型 inPutType = a.getInt(R.styleable.EditWithText_android_inputType, -100); if (inPutType != -100) { et.setInputType(inPutType); } if (!isMulti) { tv.setGravity(Gravity.TOP); et.setGravity(Gravity.TOP); MarginLayoutParams tvMarginsParams = new MarginLayoutParams( tv.getLayoutParams()); tvMarginsParams.setMargins(0, 15, 0, 13); tv.setLayoutParams(new LayoutParams(tvMarginsParams)); MarginLayoutParams etMarginsParams = new MarginLayoutParams( et.getLayoutParams()); etMarginsParams.setMargins(0, 10, 0, 13); et.setLayoutParams(new LayoutParams(etMarginsParams)); InputFilter[] filters1 = { new LengthFilter(200) }; et.setFilters(filters1); } else { tv.setGravity(Gravity.CENTER_VERTICAL); et.setGravity(Gravity.CENTER_VERTICAL); } a.recycle(); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (!isEditable) return; // 日期 if (inPutType == 20) { // TODO Auto-generated method stub new DatePickerDialog(EditWithText.this.activity, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // 设置日历 EditWithText.this.tv.setText(year + "-" + monthOfYear + "-" + dayOfMonth); EditWithText.this.et.setText(year + "-" + monthOfYear + "-" + dayOfMonth); } }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c .get(Calendar.DAY_OF_MONTH)).show(); } else if (tv.getVisibility() == View.VISIBLE) { et.setText(tv.getText().toString()); tv.setVisibility(View.GONE); et.setVisibility(View.VISIBLE); et.performClick(); et.setFocusable(true); et.setFocusableInTouchMode(true); et.requestFocus(); et.requestFocusFromTouch(); InputMethodManager inputManager = (InputMethodManager) et .getContext().getSystemService( Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(et, 0); } } }); } // 设置值 public void setText(String text) { tv.setText(text); // 增加对EditText赋值 et.setText(text); } // 获取值 public String getText() { return et.getText().toString().trim(); } // 是否具有编辑属性 public boolean isEditable() { return isEditable; } // 设置编辑属性 public void setEditable(boolean isEditable) { this.isEditable = isEditable; } // 结束编辑 public void finishEdit() { tv.setVisibility(View.VISIBLE); et.setVisibility(View.GONE); // tv.setGravity(Gravity.RIGHT); setText(getText()); } }
相关文章推荐
- edittext设置inputtype="textPassword"以后,英文字体改变的解决方法
- Android TextInputEditText设置 android:inputType="textPassword"去掉眼睛
- sdk23_EditText:singleLine="true"过时及引发inputType="textPassword"失效
- Android EditText inputType同时设置textPassword和phone
- 在Edittext设置inputType="textPassword"后,hint变形的问题
- React Native 键盘管理和 Tab Navigator 在Android TextInput遮盖,Tab Navigator上移等问题解决办法
- [已解决]android的textview 里面的text 怎么也不到中间的位置,这个时候需要设置android:includeFontPadding="false"
- jQuery设置input type="text"的值
- Android Eclipse导入源码时对自己新增的class文件提示"XXX cannot be resolved to a type"的解决办法
- js_html_input中autocomplete="off"在chrom中失效的解决办法
- Android EditText的inputType为Password时, 字体不一致的问题
- Android-WebView-解决对选择文件<input type="file">无响应
- nginx升级到 0.8.53 之后,使用老的配置出现duplicate MIME type "text/html"问题的解决办法
- ScrollView中包含EditText,设置android:windowSoftInputMode="adjustPan"后无效
- Android之设置EditText输入类型(setInputType()方法和android:inputType属性)
- Eclipse Android开发遇到:"The type org.apache.http.HttpResponse cannot be resolved."问题的解决办法
- Android ScrollView中的组件设置android:layout_height="fill_parent"不起作用的解决办法
- [已解决]EditText 代码中不能够添加小数点的属性 android:inputType="numberDecimal"
- Android-配置文件中设置“android:clickable="false"无效的原因及解决办法
- Android约束布局ConstraintLayout动态设置Id失效问题解决办法