设置显示内容与隐藏内容

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

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

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

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

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

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

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

不弹出输入盘

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

android:clickable="false"
android:focusable="false"

获取光标框选文本的位置

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

设置光标位置

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

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

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

<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustPan" >
...
</activity>

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


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

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

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

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

<EditText
android:id="@+id/comment_edittext"
android:layout_width="match_parent"
android:layout_height="52dp"
android:textSize="@dimen/font_size_14"
android:hint="评论"
android:textColorHint="@color/fontColorAuxiliaryLightGray"
android:singleLine="true"
android:visibility="gone"
android:focusable="true"
android:focusableInTouchMode="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>

监听输入法是否弹出

private void initGlobalLayoutListener(){
mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
int mScreenHeight = 0;
int mKeyboardHeight = 0;
@Override
public void onGlobalLayout() { Rect rect = new Rect();
// 测量当前窗口的显示区域
((Activity)getContext()).getWindow().getDecorView()
.getWindowVisibleDisplayFrame(rect);
if(mScreenHeight <= 0){
mScreenHeight = ((WindowManager) getContext()
.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay().getHeight();
}
//计算出软键盘的高度
int keyboardHeight = mScreenHeight - rect.bottom; //如果keyboardHeight大于屏幕的五分之一,
// 此时keyboardHeight有效,反之就是软键盘已经关闭了。
if (Math.abs(keyboardHeight) > mScreenHeight / 5) {
mKeyboardHeight = keyboardHeight;
if (mEdittext.getVisibility() == View.GONE){//此处多添加一次显示,因为OnGlobalLayoutListener的连续性会导致之前未触发键盘的判断还执行,然后又隐藏了输入框
mEdittext.setVisibility(View.VISIBLE);
mEdittext.setFocusable(true);
mEdittext.setFocusableInTouchMode(true);
mEdittext.requestFocus();
mEdittext.setTag(true);
}
L.e("已经触发键盘");
}else {
                  //获取输入法是否要显示的状态,注意别以为可以使用mEdittext.getVisibility()来替代,实际上是不行的,
                  //因为OnGlobalLayoutListener的监听是连续触发并且有延迟,很容易在mEdittext显示的一瞬间就隐藏了
if ((boolean)mEdittext.getTag()){
mEdittext.setVisibility(View.GONE);
mEdittext.setTag(false); }
L.e("没有触发键盘"); }
}
};
mRootLayout.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);//给xml里的根布局设置监听 }

点击后显示输入框

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

最后注意移除监听

@Override
public void onPause() {
super.onPause();
mRootLayout.getViewTreeObserver().removeOnGlobalLayoutListener(mGlobalLayoutListener);
}

输入状态监听

    EditText editText = (EditText)findViewById(R.id.monitor_edit_text0);
editText.addTextChangedListener(new TextWatcher() { @Override
public void onTextChanged(CharSequence text, int start, int before, int count) {
//text 输入框中改变后的字符串信息
//start 输入框中改变后的字符串的起始位置
//before 输入框中改变前的字符串的位置 默认为0
//count 输入框中改变后的一共输入字符串的数量
textView1.setText("输入后字符串 [ " + text.toString() + " ] 起始光标 [ " + start + " ] 输入数量 [ " + count+" ]"); } @Override
public void beforeTextChanged(CharSequence text, int start, int count,int after) {
//text 输入框中改变前的字符串信息
//start 输入框中改变前的字符串的起始位置
//count 输入框中改变前后的字符串改变数量一般为0
//after 输入框中改变后的字符串与起始位置的偏移量
System.out.println(text.toString());
textView0.setText("输入前字符串 [ " + text.toString() + " ]起始光标 [ " + start + " ]结束偏移量 [" + after + " ]");
} @Override
public void afterTextChanged(Editable edit) {
//edit 输入结束呈现在输入框中的信息
textView2.setText("输入结束后的内容为 [" + edit.toString()+" ] 即将显示在屏幕上");
}
});

代码上设置EditView的内容长度

/**
* 设置输入框文本长度
*
* @param length
*/
private void setEditTextMaxLength(int length) {
InputFilter[] inputFilters = {new InputFilter.LengthFilter(length)};
dialogInputEdt.setFilters(inputFilters);
}

删除EditView最后一位内容

                int index = mEditPasswordEt.getSelectionStart();
String password = mEditPasswordEt.getText().toString();
if (TextUtils.isEmpty(password)) {
return;
}
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. Ubuntu 18.04.2 aliases 设置永久生效解决方案

    设置 临时 alias alias ll="ls -al" 缺点是下次登录时就不生效了 永久生效解决方案 进入到 etc 文件夹下 cd /etc/ 创建 bash_aliases ...

  2. 基于三角形与位置指纹识别算法的WiFi定位比较

    文章来着:https://wenku.baidu.com/view/55d1f4146edb6f1aff001fec.html

  3. SQLServer 安装失败可能的原因

    问题:安装的时候显示参数指定的目录无效 解决:你的安装盘使用了文件/文件夹压缩功能,去掉压缩属性即可! 建议不要轻易使用储存盘的压缩功能

  4. CSS3新属性之---flex box布局实例

    flex box布局实例 flex的强大之处在于不管什么布局,几行命令即可实现 /*本节模板div元素(代表骰子的一个面)是Flex容器,span元素(代表一个点)是Flex项目.如果有多个项目,就要 ...

  5. 大道浮屠诀---NBU报错代码之status2

    在一次windows2008R2系统上部署7.7.3备份过程中遇到了此报错 当备份catalog时,会出现status 2报错 经过一系列排查后,得出如下解决方法 1.任务进程中有大量的nbtelem ...

  6. Winform 窗体闪烁 & 任务栏提示

    准备: [DllImport("user32.dll")] static extern bool FlashWindowEx(ref FLASHWINFO pwfi); [DllI ...

  7. D3.js坐标轴的绘制方法、添加坐标轴的刻度和各比例尺的坐标轴(V3版本)

    坐标轴(Axis)   坐标轴(Axis)在很多图表中都可见到,例如柱形图.折线图.散点图等.坐标轴由一组线段和文字组成,坐标轴上的点由一个坐标值确定.但是,如果使用SVG的直线和文字一笔一画的绘制坐 ...

  8. linux命令输出到屏幕的同时保存到文件

    有时候无法在一个屏幕中打印出所有显示内容 可以使用以下命令: ifconfig | tee ifconfig.log more ifconfig.log

  9. gcc 4步编译过程

    一. gcc编译过程  1. 预处理: 主要进行宏替换以及头文件的展开  gcc  -E   *.c  -o  *.i 2.  编译::编译生成汇编文件,会检查语法错误   gcc  -S   *.i ...

  10. IdentityServer_0_参考资料

    官方 项目地址:https://github.com/IdentityServer/IdentityServer4 官方Demo:https://github.com/IdentityServer/I ...