设置显示内容与隐藏内容

  1. if (isChecked){
  2. editPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());//设置密码明文显示
  3. editPassword.setSelection(editPassword.getText().length());
  4. }else {
  5. editPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());//设置密码隐藏显示
  6. editPassword.setSelection(editPassword.getText().length());
  7. }

自动选中焦点,并且弹出输入框

  1. EditText.setFocusable(true);//设置焦点打开
  2. EditText.setFocusableInTouchMode(true);//设置为输入焦点mode
  3. EditText.requestFocus();//申请焦点
  4. InputMethodManager inputManager = (InputMethodManager)commentEditText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
  5. inputManager.showSoftInput(EditText, )

释放焦点,并且隐藏输入框

  1. private void clearFocus(){
  2. //设置其他View可以自动获取焦,注意如果不设置会有一个问题,在你的布局里只有一个EditText的情况下,可能清除焦点后又会自动将焦点定位回去
  3. mBack.setFocusableInTouchMode(true);
  4. mAddReplyEdit.clearFocus(); //清除焦点
  5. InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
  6. if (imm.isActive() && getActivity().getCurrentFocus() != null) {
  7. imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
  8. }
  9. }

开启or关闭输入框是否可以点击

  1. private void openOrClose(boolean openOrClose){
  2. //注意,不要使用mAddReplyEdit.setFocusable(true);来开关聚焦,因为关闭后在开启会出现依然无法点击的问题
  3. mAddReplyEdit.setFocusableInTouchMode(openOrClose);
  4. }

不弹出输入盘

直接在xml布局里添加无法点击和无法获取焦点就可以了

  1. android:clickable="false"
  2. android:focusable="false"

获取光标框选文本的位置

  1. int start = mTextView.getSelectionStart();
  2. int end = mTextView.getSelectionEnd();

设置光标位置

  1. editText.setSelection(editPassword.getText().length());
  2. editText.setSelection(0, editPassword.getText().length());

输入法位置改变,改变输入框位置

android:windowSoftInputMode的值adjustPan或者adjustResize即可,像这样:

  1. <activity
  2. android:name=".MainActivity"
  3. android:windowSoftInputMode="adjustPan" >
  4. ...
  5. </activity>

这个方法在一些ListView里使用的时候,输入框依然会被遮盖.


悬浮输入框,始终悬浮在输入法的上方

首先是清单xml里添加activity的属性如下

  1. <activity android:name=".work.HomeActivity"
  2. android:windowSoftInputMode="adjustPan"/>

然后是在布局文件里的输入框,因为是点击按钮后显示输入框,所以下面的输入框在布局最下面为隐藏状态,

  1. <EditText
  2. android:id="@+id/comment_edittext"
  3. android:layout_width="match_parent"
  4. android:layout_height="52dp"
  5. android:textSize="@dimen/font_size_14"
  6. android:hint="评论"
  7. android:textColorHint="@color/fontColorAuxiliaryLightGray"
  8. android:singleLine="true"
  9. android:visibility="gone"
  10. android:focusable="true"
  11. android:focusableInTouchMode="true"
  12. app:layout_constraintBottom_toBottomOf="parent"
  13. app:layout_constraintLeft_toLeftOf="parent"
  14. app:layout_constraintRight_toRightOf="parent"/>

监听输入法是否弹出

  1. private void initGlobalLayoutListener(){
  2. mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
  3. int mScreenHeight = 0;
  4. int mKeyboardHeight = 0;
  5. @Override
  6. public void onGlobalLayout() {
  7.  
  8. Rect rect = new Rect();
  9. // 测量当前窗口的显示区域
  10. ((Activity)getContext()).getWindow().getDecorView()
  11. .getWindowVisibleDisplayFrame(rect);
  12. if(mScreenHeight <= 0){
  13. mScreenHeight = ((WindowManager) getContext()
  14. .getSystemService(Context.WINDOW_SERVICE))
  15. .getDefaultDisplay().getHeight();
  16. }
  17. //计算出软键盘的高度
  18. int keyboardHeight = mScreenHeight - rect.bottom;
  19.  
  20. //如果keyboardHeight大于屏幕的五分之一,
  21. // 此时keyboardHeight有效,反之就是软键盘已经关闭了。
  22. if (Math.abs(keyboardHeight) > mScreenHeight / 5) {
  23. mKeyboardHeight = keyboardHeight;
  24. if (mEdittext.getVisibility() == View.GONE){//此处多添加一次显示,因为OnGlobalLayoutListener的连续性会导致之前未触发键盘的判断还执行,然后又隐藏了输入框
  25. mEdittext.setVisibility(View.VISIBLE);
  26. mEdittext.setFocusable(true);
  27. mEdittext.setFocusableInTouchMode(true);
  28. mEdittext.requestFocus();
  29. mEdittext.setTag(true);
  30. }
  31. L.e("已经触发键盘");
  32. }else {
  33.                   //获取输入法是否要显示的状态,注意别以为可以使用mEdittext.getVisibility()来替代,实际上是不行的,
  34.                   //因为OnGlobalLayoutListener的监听是连续触发并且有延迟,很容易在mEdittext显示的一瞬间就隐藏了
  35. if ((boolean)mEdittext.getTag()){
  36. mEdittext.setVisibility(View.GONE);
  37. mEdittext.setTag(false);
  38.  
  39. }
  40. L.e("没有触发键盘");
  41.  
  42. }
  43. }
  44. };
  45. mRootLayout.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);//给xml里的根布局设置监听
  46.  
  47. }

点击后显示输入框

  1. mBtn.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. mEdittext.setFocusable(true);
  5. mEdittext.setFocusableInTouchMode(true);
  6. mEdittext.requestFocus();
  7. InputMethodManager inputManager = (InputMethodManager) mCommentEdittext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);//获取输入法管理
  8. inputManager.showSoftInput(mEdittext, 0);//要显示输入法的view
  9. mEdittext.setTag(true);//给输入框设一个标记,标示输入框已经显示
  10. }
  11. });

最后注意移除监听

  1. @Override
  2. public void onPause() {
  3. super.onPause();
  4. mRootLayout.getViewTreeObserver().removeOnGlobalLayoutListener(mGlobalLayoutListener);
  5. }

输入状态监听

  1. EditText editText = (EditText)findViewById(R.id.monitor_edit_text0);
  2. editText.addTextChangedListener(new TextWatcher() {
  3.  
  4. @Override
  5. public void onTextChanged(CharSequence text, int start, int before, int count) {
  6. //text 输入框中改变后的字符串信息
  7. //start 输入框中改变后的字符串的起始位置
  8. //before 输入框中改变前的字符串的位置 默认为0
  9. //count 输入框中改变后的一共输入字符串的数量
  10. textView1.setText("输入后字符串 [ " + text.toString() + " ] 起始光标 [ " + start + " ] 输入数量 [ " + count+" ]");
  11.  
  12. }
  13.  
  14. @Override
  15. public void beforeTextChanged(CharSequence text, int start, int count,int after) {
  16. //text 输入框中改变前的字符串信息
  17. //start 输入框中改变前的字符串的起始位置
  18. //count 输入框中改变前后的字符串改变数量一般为0
  19. //after 输入框中改变后的字符串与起始位置的偏移量
  20. System.out.println(text.toString());
  21. textView0.setText("输入前字符串 [ " + text.toString() + " ]起始光标 [ " + start + " ]结束偏移量 [" + after + " ]");
  22. }
  23.  
  24. @Override
  25. public void afterTextChanged(Editable edit) {
  26. //edit 输入结束呈现在输入框中的信息
  27. textView2.setText("输入结束后的内容为 [" + edit.toString()+" ] 即将显示在屏幕上");
  28. }
  29. });

代码上设置EditView的内容长度

  1. /**
  2. * 设置输入框文本长度
  3. *
  4. * @param length
  5. */
  6. private void setEditTextMaxLength(int length) {
  7. InputFilter[] inputFilters = {new InputFilter.LengthFilter(length)};
  8. dialogInputEdt.setFilters(inputFilters);
  9. }

删除EditView最后一位内容

  1. int index = mEditPasswordEt.getSelectionStart();
  2. String password = mEditPasswordEt.getText().toString();
  3. if (TextUtils.isEmpty(password)) {
  4. return;
  5. }
  6. mEditPasswordEt.getText().delete(index - 1, index);

end

Android开发 EditText的开发记录的更多相关文章

  1. Android开发EditText属性

    Android开发EditText属性 EditText继承关系:View-->TextView-->EditText EditText的属性很多,这里介绍几个:android:hint= ...

  2. Android开发-Android Studio问题以及解决记录

    [Android开发] Android Studio问题以及解决记录   http://blog.csdn.net/niubitianping/article/details/51400721 1.真 ...

  3. Android应用开发EditText文本内容变化监听方法

    import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android. ...

  4.  paip.android环境搭建与开发事例

    paip.android环境搭建与开发事例 好长时间没有玩AndROID了..以前常常做ANDROID的,今天决定在下载一个要做个时间设置器 作者Attilax ,  EMAIL:1466519819 ...

  5. Android 个人手机通讯录开发

    一.Android 个人手机通讯录开发 数据存储:SQLite 数据库 开发工具:Android Studio 二.Phone Module 简介 1. 界面展示                2. ...

  6. Android与Swift iOS开发:语言与框架对比

    Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...

  7. Android开发学习——搭建开发环境

    在学校开课学习了android的一些简单的UI组件,布局,四大组件学习了2个,数据存储及网络通信,都是一些简单的概念,入门而已.许多东西需要自己去学习. 学习一下 Android开发环境的搭建,两种方 ...

  8. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  9. 总结android项目的基本开发步骤(转帖)

    总结android项目的基本开发步骤(转帖)   做了几个android企业应用项目后,总结了项目的基本开发步骤,希望能够交流.一 应用规划:    ※确定功能.    ※必须的界面及界面跳转的流程. ...

随机推荐

  1. iOS 点击Application icon加载推送通知Data

    今天做APNS远程推送通知遇到了一个问题,就是手机接收到通知的时候,如果马上点击通知的 alert view时候,系统马上唤醒你的Application,通知或调用你的didReceiveLocalN ...

  2. c++ 实现元组 重载cout os 输出

    #include <iostream> #include <string> using namespace std; class CAnyType //: public COb ...

  3. LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)

    题目标签:Linked List 题目给了我们一组 linked list,让我们把每对nodes 互换位置. 新键一个dummy node,然后遍历list,每次建立 s1 和 s2 记录两个点,然 ...

  4. jQuery 基本选择器

    1 基本选择器 $(‘#id属性值’)  ----------->document.getElementById() $(‘tag标签名称’)----------->document.ge ...

  5. PAT_A1099#Build A Binary Search Tree

    Source: PAT A1099 Build A Binary Search Tree (30 分) Description: A Binary Search Tree (BST) is recur ...

  6. unittest(1)

    一.unittest核心概念 1.unittest四个核心概念 unittest四个核心概念包括:TestCase.TestSuite.TestRunner.Test Fixture TestCase ...

  7. Hive应用实例:WordCount

  8. 【笔记篇】不普及向——莫比乌斯反演学习笔记 && 栗题HAOI2011 Problem B

    Part0 广告(当然没有广告费) P.S. 这篇文章是边学着边用Typora写的...学完了题A了blog也就呼之欲出了~有latex化式子也非常方便...非常建议喜欢Markdown的dalao们 ...

  9. Codeforces Round #563 (Div. 2) F. Ehab and the Big Finale

    后续: 点分治标程 使用father数组 比使用vis数组优秀(不需要对vis初始化) https://codeforces.com/problemset/problem/1174/F https:/ ...

  10. colormap 参数及对应色卡

    [参考] [1]matlab帮助文档