android 基础知识 七

时间:2022-11-12 15:33:10
Android EditText截获与监听输入事件
预期目标:如下图,输入框中每输入一个字符,下面的TextView可以迅速的显示出来输入框中的内容。
android 基础知识 七

20110929092534.jpg (4.97 KB, 下载次数: 0)

下载附件  保存到相册

2012-10-16 14:36 上传




1.第一种方法:使用 setOnKeyListener(),不过这种方式只能监听硬键盘事件。

  1. edittext.setOnKeyListener(new View.OnKeyListener() {
  2.     @Override
  3.     public boolean onKey(View v, int keyCode, KeyEvent event) {
  4.         textview.setText(edittext.getText());
  5.         return false;
  6.     }
  7. });
复制代码
2.第二种方法:使用TextWatcher类,这种方式是可以监听软键盘和硬键盘的,我们只需要实现onTextChanged方法即可,另外TextWatcher还提供了beforeTextChangedafterTextChanged方法,用于更加详细的输入监听处理。

  1. edittext.addTextChangedListener(new TextWatcher() {            
  2.     @Override
  3.     public void onTextChanged(CharSequence s, int start, int before, int count) {
  4.         textview.setText(edittext.getText());
  5.     }
  6.       
  7.     @Override
  8.         public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  9.     }
  10.       
  11.     @Override
  12.         public void afterTextChanged(Editable s) {
  13.     }
  14. });
复制代码
3、代码片段:实现当输入到最大值时则不允许再输入了,另外,由于EditText并没有提供给我们EditText的禁止输入功能,以下方法也实现了此功能。

  1. private void setEditable(EditText mEdit, int maxLength, boolean value) {
  2.     if (value) {
  3.         mEdit.setFilters(new InputFilter[] { new MyEditFilter(maxLength) });
  4.         mEdit.setCursorVisible(true);
  5.         mEdit.setFocusableInTouchMode(true);
  6.         mEdit.requestFocus();   
  7.     }
  8.     else {
  9.         mEdit.setFilters(new InputFilter[] { new InputFilter() {
  10.             @Override
  11.             public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
  12.                 return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
  13.             }
  14.         } });
  15.         mEdit.setCursorVisible(false);
  16.         mEdit.setFocusableInTouchMode(false);
  17.         mEdit.clearFocus();
  18.     }
  19. }
复制代码
-------------------------------------------------------------------------------------------------
Android获取文字的宽度

  1. Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  2. mTextPaint.setColor(Color.WHITE);
  3.   
  4. // Define the string.
  5. String displayText = "Hello World!";
  6.   
  7. // Measure the width of the text string.
  8. float textWidth = mTextPaint.measureText(displayText);
复制代码
---------------------------------------------------------------------------------------
android ArrayAdapter的使用
写一个XML用于显示ListView。
list1.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:id="@+id/checklv1"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     />
复制代码
在主程序里定义一个

  1. private String[] array1= {"aaa", "bbb", "ccc", "ddd"};
复制代码
然后调用

  1. private ListView lv1;
  2. lv1 = (ListView) findViewById(R.id.lv1);
  3. ArrayAdapter adapter1=new ArrayAdapter (showinfo.this,R.layout.list1,array1);
  4. lv1.setAdapter(adapter1);
复制代码
lv1为在界面里的一个ListView的widget。
----------------------------------------------------------------------------------------------
Android TextView无焦点滚动显示第一种:

  1. Animation ani = new TranslateAnimation(310f, -400f, 0.0f, 0.0f);
  2. ani.setDuration(10000);
  3. ani.setRepeatCount(500);
  4. ani.setRepeatMode(1);
  5. TextView textView =(TextView) this.findViewById(R.id.text);
  6. textView .startAnimation(ani);
复制代码
第二种:

  1. <TextView
  2.     android:id="@+id/TextView02"
  3.     android:singleLine="true"
  4.     android:scrollHorizontally="true"
  5.     android:ellipsize="marquee"
  6.     android:marqueeRepeatLimit="marquee_forever"
  7.     android:textSize="16px"
  8.     android:focusable="true"
  9.     android:textColor="@color/gray"
  10.     android:layout_width="wrap_content"
  11.     android:layout_height="wrap_content"
  12.     />
复制代码
第二种代码:

  1. nextsong = (TextView) findViewById(R.id.TextView02);
  2. nextsong.setSelected(true);