前段时间项目需求,需要做一个有限制长度的输入框并动态显示剩余文字,同时也要动态改变EditText的高度来增加用户体验。现整理出来与大家分享。

先来看看效果图

Android动态改变高度以及计算长度的EditText_第1张图片


看了效果就分享一下布局

                            

android:layout_alignParentBottom="true"
这句很重要,很多人在第一次做的时候不知道,经常会说弹出的键盘会遮住了输入框,这个加上manifest.xml里的android:configChanges="keyboardHidden|orientation|screenSize"就能可以实现弹出输入法时吧输入框顶上去

                                                           

这里我使用TextWatcher来对EditText进行监听,动态计算输入的内容。至于取得控件的高度,相信不少新人都是在oncreate方法里使用getHeight方法来取得高度,然后很多人都会抛去一个问题,怎么我取得的值为0?这是因为activity在初始化的时候创建view,而在刚创建view对象时系统并没有绘制完成,因此get出来的高度为0。那么怎么去正确get到高度?应该是在view绘制完成后再去get,是的,监听view的绘制,在view绘制完成后再使用getHeight方法。这里我建议使用ViewTreeObserver方法来监听,再view绘制完成后系统会回调给acitvity通知其绘制完成,而且只执行一次。具体代码如下

package com.hjhrq1991.myeditdemo;import android.os.Bundle;import android.app.Activity;import android.text.Editable;import android.text.TextWatcher;import android.view.View;import android.view.ViewTreeObserver;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.widget.EditText;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private EditText mMsg;//输入框private TextView mContentLen;//文字长度提示文本private int mHeight;private int middleHeight;private int maxHeight;private boolean lenTips = true;private int MAX_LENGTH = 100;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}/** * @deprecated 初始化,在这里使用ViewTreeObserver获取控件的高度 */private void init() {mMsg = (EditText) findViewById(R.id.input);mContentLen = (TextView) findViewById(R.id.contentlen);//动态计算字符串的长度mMsg.addTextChangedListener(mTextWatcher);//取得控件高度ViewTreeObserver vto2 = mMsg.getViewTreeObserver();vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@SuppressWarnings("deprecation")@Overridepublic void onGlobalLayout() {mMsg.getViewTreeObserver().removeGlobalOnLayoutListener(this);mHeight = mMsg.getHeight();middleHeight = 8 * mHeight / 5;maxHeight = 21 * mHeight / 10;}});}/** * edittext输入监听 */TextWatcher mTextWatcher = new TextWatcher() {private CharSequence temp;// private int editStart;// private int editEnd;@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {// TODO Auto-generated method stubtemp = s.toString().trim();}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {// TODO Auto-generated method stub}@Overridepublic void afterTextChanged(Editable s) {// TODO Auto-generated method stub// editStart = mMsg.getSelectionStart();// editEnd = mMsg.getSelectionEnd();int len = temp.length();//取得内容长度int lineCount = mMsg.getLineCount();//取得内容的行数if (len != 0) {mContentLen.setVisibility(View.VISIBLE);if (len <= MAX_LENGTH) {mContentLen.setText("(" + (MAX_LENGTH - temp.length())+ ")");} else {if (lenTips) {Toast.makeText(getApplicationContext(),String.format(getString(R.string.more_than_litmit),MAX_LENGTH), 100).show();lenTips = false;}mContentLen.setText("(-" + (temp.length() - MAX_LENGTH)+ ")");}} else {mContentLen.setVisibility(View.GONE);}/** * 根据行数动态计算输入框的高度 */RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mMsg.getLayoutParams();if (lineCount <= 1) {params.height = mHeight;mMsg.setLayoutParams(params);} else if (lineCount == 2) {params.height = middleHeight;mMsg.setLayoutParams(params);} else {params.height = maxHeight;mMsg.setLayoutParams(params);}}};}
大致思路就是如此。如有疑问,欢迎加关注联系,相互学习。

demo下载请猛戳

如有转载,请注明出处:http://blog.csdn.net/hjhrq1991

更多相关文章

  1. 如何演示你的App?Android录制Gif动态图教程
  2. Android DexClassLoader动态加载类文件
  3. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态
  4. Android水面落叶动态壁纸源码及分析 附下载地址
  5. Android 动态加载APK--代码安装、获取安装包中的资源及Intent调
  6. EditText 行间距 以及光标高度和样式
  7. Android 中动态提取图片中颜色作为主题色

随机推荐

  1. Android Studio3.0 新特性 ~ New Features
  2. 如何使用Android Studio开发/调试Android
  3. Android中读取电话本Contacts联系人的所
  4. Android中对标准内核的按键映射以及按键
  5. 谷歌Android三季度市场份额升至17%
  6. 在 Android 上使用 XML 和 JSON,第 1 部分
  7. Android(安卓)adb 常用命令
  8. Android开发模式:MVP Vs MVVM
  9. Android 学习指南
  10. [置顶] json数据解析与生成 android