Articles of android edittext

如何使用InputConnectionWrapper?

我有一个EditText 。 现在我想让用户对这个EditText所做的所有更改,并在手动插入EditText之前使用它们。 我不希望用户直接更改EditText的文本。 这应该只能通过我的代码(例如通过使用replace()或setText() )来完成。 我search了一下,发现了一个名为InputConnectionWrapper的有趣的类。 根据javadoc,它将作为给定InputConnection的代理。 所以我就这样分类: private class EditTextInputConnection extends InputConnectionWrapper { public EditTextInputConnection(InputConnection target, boolean mutable) { super(target, mutable); } @Override public boolean commitText(CharSequence text, int newCursorPosition) { // some code which takes the input and manipulates it and calls editText.getText().replace() afterwards return true; } } 要初始化包装器,我在我的EditText -subclass中覆盖了以下方法: public InputConnection onCreateInputConnection(EditorInfo […]

Android,从EditText中dynamic改变下划线颜色

是否有可能dynamic改变EditText下划线的颜色? 就像效果一样,当我把它聚焦的时候,它变成了蓝色。 希望你明白我想要做什么。

EditText光标驻留在提示之后

我在电子邮件和密码字段的应用程序中有一个简单的loginactivity 。 电子邮件EditText的hint和cursor位置有一个奇怪的问题: 从图中可以看出,默认情况下, cursor不在第一个位置。 在提示之后显示(好像hint是input文本) 就layout而言,密码EditText和电子邮件一样,但是没有这个问题: 任何人有任何线索为什么会发生这种情况 我该如何解决呢? 这里是活动的布局: <ScrollView android:id="@+id/login_form" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout style="@style/LoginFormContainer" android:orientation="vertical" > <EditText android:id="@+id/email" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="left" android:hint="@string/prompt_email" android:inputType="textEmailAddress" android:maxLines="1" android:singleLine="true" /> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="left" android:hint="@string/prompt_password" android:imeActionId="@+id/login" android:imeActionLabel="@string/action_sign_in_short" android:imeOptions="actionUnspecified" android:inputType="textPassword" android:maxLines="1" android:singleLine="true" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="20dip" android:gravity="center" > <!– sign in button –> <TextView android:gravity="center" […]

设置EditText imeOptions到actionNext使用数字时没有效果

这里我的edittext: – <com.os.fastlap.util.customclass.EditTextPlayRegular android:id="@+id/full_name_et" style="@style/Edittext_white_13sp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_5sdp" android:background="#00ffffff" android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" android:imeOptions="actionNext" android:inputType="text" android:maxLength="20" android:maxLines="1" android:nextFocusDown="@+id/last_name_et" android:textCursorDrawable="@null" /> 当我在edittext中删除digit ,它工作正常,但与digit imeOptions不起作用。 但一个令人惊讶的事情,如果我使用singleLine而不是maxLines它工作正常。 但singleLine现在已被弃用。 我不能删除我的edittext中的数字,我不想使用弃用的方法 。 任何人都可以解决这个问题。 非常感谢

Android:带进度条的EditText?

我正在构build一个浏览器,并且在WebView的顶部有一个地址栏(如EditText)。 我想要做的就是在EditText的背景下以graphics方式呈现页面的加载,就像在iphone的浏览器中一样。 这可能吗? 谢谢 UPDATE 到目前为止,我已经尝试了ClipDrawable方法。 我所做的是拿着股票可绘制的android.R.drawable.editbox_background并创build2个版本 – 白色背景和蓝色(显示进度)。 然后我会像这样创build一个LayerDrawable: barDrawable = addressBar.getBackground(); Drawable progress = getResources().getDrawable(R.drawable.editbox_progress); cbarDrawable = new ClipDrawable(progress, Gravity.LEFT, ClipDrawable.HORIZONTAL); cbarDrawable.setLevel(0); layerlist = new LayerDrawable(new Drawable[] { barDrawable, cbarDrawable }); addressBar.setBackgroundDrawable(layerlist); 然后我会在加载过程中调用setLevel。 现在的问题是有一些奇怪的问题,比如:白色的drawable太大或者移动到顶端。 你怎么看?

AppCompat和EditText在不同的API上有不同的下划线

我试图使EditText下划线颜色变化(它将用于input的validation,所以它必须能够在运行时改变)。 我正在使用AppCompat库。 问题是,在API 21及以上,我看到透明的黑色线条(灰色覆盖),而不是粗体版本。 如何使其与API 16相同? 我用这个代码来改变色调: final Drawable originalDrawable = view.getBackground(); final Drawable wrappedDrawable = DrawableCompat.wrap(originalDrawable); DrawableCompat.setTint(wrappedDrawable, Color.RED); setBackground(view,wrappedDrawable);

防止将自定义mimetype拖放到EditText

我有一个自定义的MIMEtypes,我打算用于在应用程序中拖放应用程序对象。 这似乎是工作,但我发现EditText字段也接受放置操作。 我不想要这样的事情发生。 首先,我已经定义了这样的custome mimetypes: public static final String MIME_TYPE_MYNODE = "com.example.mockup/mynode"; 然后,在源对象的onTouch处理程序中,我有: @Override //—————————————————————————– public boolean onTouch (View v, MotionEvent e) { … else if (e.getAction() == MotionEvent.ACTION_MOVE) { String[] mimeTypes = {MIME_TYPE_MYNODE}; ClipData data = new ClipData ("Task Tamer Note", mimeTypes, new ClipData.Item ("unused")); View.DragShadowBuilder shadow = new View.DragShadowBuilder(this); Object localState = v; […]

Android – 如何只允许一定数量的小数位

你知道任何方法,以确保用户只能input最大小数位数字。 我不知道如何解决这个问题。 在MS SQL数据库中,我将从我的应用程序发送数据我有这种types的decimal(8,3)列decimal(8,3)现在考虑最终要存储我想要在Android中validation的值的列的数据types,我考虑过这两种情况: 如果用户input一个没有小数的数字,则最大位数必须是8 如果用户input一个带小数的数字,则最大的数字位数必须是8(包括小数点右边的数字) 现在我确定了第一个案子,但是对第二个案子没有太多的了解。 保持固定的最大位数(例如,总是8)是否正确? 还是应该考虑在小数点的左边和右边最多允许8个数字? 无论哪种方式,这是我一直在Android尝试: mQuantityEditText.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { String str = mQuantityEditText.getText().toString(); DecimalFormat format = (DecimalFormat) DecimalFormat .getInstance(); DecimalFormatSymbols symbols = format.getDecimalFormatSymbols(); char sep = symbols.getDecimalSeparator(); int indexOFdec = str.indexOf(sep); if (indexOFdec >= 0) { if (str.substring(indexOFdec, str.length() – 1).length() > 3) { s.replace(0, […]

如何在editText中处理imageSpan上的onClick事件?

我正在一个应用程序中,用户从画廊中select一个图像,它将被添加到editText,现在我想如果用户点击editText中的图像,它应该在fullScreen中打开,我使用下面的代码: public void addToEdt(Bitmap bitmap){ SpannableString ss = new SpannableString("abc"); Drawable d = new BitmapDrawable(getResources(), bitmap); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); ss.setSpan(span, 0, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); edt_note.setTransformationMethod(null); edt_note.getText().insert(edt_note.getSelectionStart(), ss); final int start = ss.getSpanStart(span); final int end = ss.getSpanEnd(span); ClickableSpan click_span = new ClickableSpan() { @Override public void onClick(View widget) { […]

findViewById为EditText返回null

公共类MainActivity扩展活动 { 私人EditText editText; /** 在第一次创build活动时调用。 * / @覆盖 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 的setContentView(R.layout.main); editText =(EditText)findViewById(R.id.etext); if(editText == null) { Log.v(“editText”,“booohooo”); } 其他 { Log.v(“editText”,“Success”); } final Button button =(Button)findViewById(R.id.gobutton); button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { if(editText!= null) { Log.v(“editText”,“不是NULL”); } 其他 { Log.v(“editText”,“是NULL :(”); } //点击执行操作 if(editText!= null) { editText.getText(); } […]