EditText使用详解


EditText简介
  EditText是一个非常重要的组件,可以说它是用户和Android应用进行数据传输窗户,有了它就等于有了一扇和Android应用传输的门,通过它用户可以把数据传给Android应用,然后得到我们想要的数据。
  EditText是TextView的子类,所以TextView的方法和特性同样存在于EditText中,具体的TextView的介绍可以参考上一节Android系列教程之六:TextView小组件的使用--附带超链接和跑马灯效果
  三:长度和空白提示文字,提示文字颜色,是否可编辑
  EditText有一些属性可以设置EditText的特性,比如最大长度,空白提示文字等。
  有时候我们有一些特属的需要,要求只能在EditText中输入特定个数的字符,比如身份证号、手机号吗等。这时候就可以通过android:maxLength属性来设置最大输入字符个数,比如 android:maxLength=“4”就表示最多能输入4个字符,再多了就输入不进去了。
   空白提示文字。有时候我们需要说明你定义的这个EditText是做什么用的,比如让输入“用户名”,或者输入“电话号码”等,但是你又不想在 EditText前面加一个TextView来说明这是输入“用户名”的,因为这会使用一个 TextView,那么怎么办呢?EditText为我们提供了android:hint来设置当EditText内容为空时显示的文本,这个文本只在 EditText为空时显示,你输入字符的时候就消失了,不影响你的EditText的文本。。修改main.xml如下:
  Xml代码
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:andro
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < EditText
  android:
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:maxLength="40"
  android:hint="请输入用户名..."/>
  < /LinearLayout>
  运行应用就会看到如下的效果:

  看看吧,简洁明了还不用新增一个TextView说明,也不影响用户操作。


  接上页
  上面列出了空白时的提示文字,有的人说了,我不想要这个灰色的提示文字,和我的应用整体风格不协调,那也行啊,我们可以换颜色,怎么换呢,就是通过android:textColorHint属性设置你想要的颜色。修改main.xml如下:
  Xml代码
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:andro
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < EditText
  android:
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:maxLength="40"  

android:hint="请输入用户名..."
  android:textColorHint="#238745"/>
  < /LinearLayout>
  运行程序效果如下:

  看到了吧,颜色已经变了。。
  还有一个比较实用的功能,就是设置EditText的不可编辑。设置android:enabled="false"可以实现不可编辑,可以获得焦点。这时候我们看到EditText和一个TextView差不多:

  实现类似html中Textarea的文本域。在Android中没有专门的文本域组件,但是可以通过设置EditText的高来实现同样的文本域功能。修改main.xml如下:
  Xml代码
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:andro
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < EditText
  android:
  android:layout_width="fill_parent"
  android:layout_height="200dip"/>
  < /LinearLayout>
  运行程序效果如下:


  接上页

  四:输入特殊格式的字符
  在我们开发程序的时候不免会输入一些特属个数的字符,比如密码(输入框的字符要加密显示),电话号码(比如数字和-),数字等,这些都算是一些特属格式的字符,强大的EditText同样为我们提供了输入这些特属格式字符的设置。
  密码文本框。密码输入也是Android应用常用的功能,通过配置EditText的android:password="true"就可以实现这一密码输入功能,修改main.xml如下:
  Xml代码
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:andro
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < EditText
  android:
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:password="true"/>
  < /LinearLayout>
  运行效果如下:

  可以看到我们输入的字符已经被“.”这样的掩码所代替。
  手机中 发短信打电话是必不可少的,所以用于专门输入电话号码的文本框也是大有用途,有了他我们对是否是电话号码的校验就容易的多了(因为字符是正确的,只要校验 格式 ).通过设置android:phoneNumber="true"就可以把EditText变成只接受电话号码输入的文本框,连软键盘都已经变成拨号专 用软键盘了,所以不用再担心输入其他字符了。修改main.xml如下:
  Xml代码
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:andro
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < EditText
  android:


  接上页
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:phoneNumber="true"/>
  < /LinearLayout>
  运行程序效果如下:

  注意看软键盘,已经变成拨号专用的啦.
   有时候我们只想输入数字,不想输入字母,EditText为我们提供了 android:numeric来控制输入的数字类型,一共有三种分别为integer(正整数)、signed(带符号整数)和decimal(浮点 数)。这里以signed类型的为例,修改main.xml如下:
  Xml代码
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:andro
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < EditText
  android:
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:numeric="signed"/>
  < /LinearLayout>
  运行效果如下:

  注意这里的软键盘变成“数字键盘”的变化.
  五:为文本指定特定的软键盘类型
   前面我们通过指定为电话号码特定格式,然后键盘类型变成了拨号专用的键盘,这个是自动变的,其实我们也可以通 过android:inputType来设置文本的类型,让输入法选择合适的软键盘的。。android:inputType有很多类型,这里使用 date类型来演示,修改main.xml如下:
  Xml代码
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:andro android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < EditText


  接上页
  android:
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:inputType="date"/>
  < /LinearLayout>
  运行效果如下:

  六:Enter键图标的设置
   软键盘的Enter 键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们输入要搜索的文本,然后按 Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜 索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完 成”文本。这里举几个常用的常量值:
actionUnspecified 未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED.效果: 

actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE 效果: 

actionGo 去往,对应常量EditorInfo.IME_ACTION_GO 效果: 

actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH 效果: 

actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND 效果: 

actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT 效果: 

actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE 效果: 



  接上页
  下面已搜索为例,演示一个实例,修改main.xml如下:
  修改HelloEditText如下:
  Xml代码
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:andro
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < EditText
  android:
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:imeOptions="actionSearch"/>
  < /LinearLayout>
  Java代码
  package com.flysnow;
  import android.app.Activity;
  import android.os.Bundle;
  import android.view.KeyEvent;
  import android.widget.EditText;
  import android.widget.TextView;
  import android.widget.Toast;
  import android.widget.TextView.OnEditorActionListener;
  public class HelloEditText extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  EditText editText=(EditText)findViewById(R.id.edit_text);
  editText.setOnEditorActionListener(new OnEditorActionListener() {
  @Override
  public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();
  return false;
  }
  });
  }
  }
  运行程序,点击回车(也就是搜索图标软键盘按钮)会显示该actionId.我们上面的每一个设置都会对应一个常量,这里的actionId就是那个常量值。



  接上页
  七:EditText的取值、全选、部分选择、获取选中文本
  下面通过一个例子来演示EditText的取值、全选、部分选择和获取选中文本.main.xml修改如下:
  Xml代码
  < ?xml version="1.0" encoding="utf-8"?>
  < LinearLayout xmlns:andro
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  < EditText
  android:
  android:layout_width="fill_parent"

当前位置:黑软基地 → mobi → Android → 应用技巧
日期:2011-06-19 16:13:19  www.hackvip.com  来源:转载(网友发布或软件采集所得)  

Android系列教程之七:EditText使用详解-包含很多教程上看不到的功能演示

  android:layout_height="wrap_content"
  android:imeOptions="actionSearch"/>
  < Button
  android:
  android:text="取值"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>
  < Button
  android:
  android:text="全选"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>
  < Button
  android:
  android:text="从第2个字符开始选择"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>
  < Button
  android:
  android:text="获取选中文本"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>
  < /LinearLayout>
  HelloEditText修改如下:
  Java代码
  package com.flysnow;
  import android.app.Activity;
  import android.os.Bundle;
  import android.text.Editable;
  import android.text.Selection;
  import android.view.KeyEvent;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.EditText;


  接上页
  import android.widget.TextView;
  import android.widget.Toast;
  import android.widget.TextView.OnEditorActionListener;
  /**
  * EditText演示
  * @author 飞雪无情
  * @since 2010-11-29
  */
  public class HelloEditText extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  final EditText editText=(EditText)findViewById(R.id.edit_text);
  //监听回车键
  editText.setOnEditorActionListener(new OnEditorActionListener() {
  @Override
  public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();
  return false;
  }
  });
  //获取EditText文本
  Button getValue=(Button)findViewById(R.id.btn_get_value);
  getValue.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  Toast.makeText(HelloEditText.this, editText.getText().toString(), Toast.LENGTH_SHORT).show();
  }
  });
  //让EditText全选
  Button all=(Button)findViewById(R.id.btn_all);
  all.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  editText.selectAll();
  }
  });
  //从第2个字符开始选择EditText文本
  Button select=(Button)findViewById(R.id.btn_select);
  select.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  Editable editable=editText.getText();
  Selection.setSelection(editable, 1,editable.length());


  接上页
  }
  });
  //获取选中的文本
  Button getSelect=(Button)findViewById(R.id.btn_get_select);
  getSelect.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
  int start=editText.getSelectionStart();
  int end=editText.getSelectionEnd();
  CharSequence selectText=editText.getText().subSequence(start, end);
  Toast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT).show();
  }
  });
  }
  /**
  * 交换两个索引
  * @param start 开始索引
  * @param end 结束索引
  */
  protected void switchIndex(int start, int end) {
  int temp=start;
  start=end;
  end=temp;
  }
  }
  运行效果如下:

  可以通过输入文字和点击下面的按钮测试。
  八:小结
  这结详细介绍了EditText的大部分特性和常用功能,如常用的密码框,获取值等等。这几天忙的没更新,这次更新个长的。可以够消化一阵子的。
posted @ 2012-04-03 19:43 老马寻途 阅读(10) 评论(0)  编辑
 

Android中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shape有了大体的了解,稍作总结:

先看下面的代码:

XML/HTML代码
  1. <shape>  
  2.     <!-- 实心 -->  
  3.     <solid android:color="#ff9d77"/>  
  4.     <!-- 渐变 -->  
  5.     <gradient  
  6.         android:startColor="#ff8c00"  
  7.         android:endColor="#FFFFFF"  
  8.         android:angle="270" />  
  9.     <!-- 描边 -->  
  10.     <stroke  
  11.         android:width="2dp"  
  12.         android:color="#dcdcdc" />  
  13.     <!-- 圆角 -->  
  14.     <corners  
  15.         android:radius="2dp" />  
  16.     <padding  
  17.         android:left="10dp"  
  18.         android:top="10dp"  
  19.         android:right="10dp"  
  20.         android:bottom="10dp" />  
  21. </shape>  

 


solid:实心,就是填充的意思
android:color指定填充的颜色

gradient:渐变
android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。
另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。

stroke:描边
android:width="2dp" 描边的宽度,android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth="5dp"

android:dashGap="3dp"
其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。

corners:圆角
android:radius为角的弧度,值越大角越圆。
我们还可以把四个角设定成不同的角度,方法为:

XML/HTML代码
  1. <corners  
  2.   
  3.         android:topRightRadius="20dp"    右上角  
  4.         android:bottomLeftRadius="20dp"    右下角  
  5.         android:topLeftRadius="1dp"    左上角  
  6.         android:bottomRightRadius="0dp"    左下角  
  7. />  



这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。
还有网上看到有人说设置成0dp无效,不过我在测试中发现是可以的,我用的是2.2,可能修复了这个问题吧,如果无效的话那就只能设成1dp了。

padding:间隔
这个就不用多说了,XML布局文件中经常用到。


大体的就是这样,以下是一个使用的具体示例:用在Selector中作为Button的背景,分别定义了按钮的一般状态、获得焦点状态和按下时的状态,具体代码如下:

XML/HTML代码
  1. main.xml:  
  2. <Button  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:text="TestShapeButton"  
  6.     android:background="@drawable/button_selector"  
  7.     />  
  8. >  



button_selector.xml:

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector  
  3.     xmlns:android="http://schemas.android.com/apk/res/android">  
  4.     <item android:state_pressed="true" >  
  5.         <shape>  
  6.             <!-- 渐变 -->  
  7.             <gradient  
  8.                 android:startColor="#ff8c00"  
  9.                 android:endColor="#FFFFFF"  
  10.                 android:type="radial"  
  11.                 android:gradientRadius="50" />  
  12.             <!-- 描边 -->  
  13.             <stroke  
  14.                 android:width="2dp"  
  15.                 android:color="#dcdcdc"  
  16.                 android:dashWidth="5dp"  
  17.                 android:dashGap="3dp" />  
  18.             <!-- 圆角 -->  
  19.             <corners  
  20.                 android:radius="2dp" />  
  21.             <padding  
  22.                 android:left="10dp"  
  23.                 android:top="10dp"  
  24.                 android:right="10dp"  
  25.                 android:bottom="10dp" />  
  26.         </shape>  
  27.     </item>  
  28.     <item android:state_focused="true" >  
  29.         <shape>  
  30.             <gradient  
  31.                 android:startColor="#ffc2b7"  
  32.                 android:endColor="#ffc2b7"  
  33.                 android:angle="270" />  
  34.             <stroke  
  35.                 android:width="2dp"  
  36.                 android:color="#dcdcdc" />  
  37.             <corners  
  38.                 android:radius="2dp" />  
  39.             <padding  
  40.                 android:left="10dp"  
  41.                 android:top="10dp"  
  42.                 android:right="10dp"  
  43.                 android:bottom="10dp" />  
  44.         </shape>  
  45.     </item>  
  46.     <item>        
  47.         <shape>  
  48.             <solid android:color="#ff9d77"/>  
  49.             <stroke  
  50.                 android:width="2dp"  
  51.                 android:color="#fad3cf" />  
  52.             <corners  
  53.                 android:topRightRadius="5dp"  
  54.                 android:bottomLeftRadius="5dp"  
  55.                 android:topLeftRadius="0dp"  
  56.                 android:bottomRightRadius="0dp"  
  57.             />  
  58.             <padding  
  59.                 android:left="10dp"  
  60.                 android:top="10dp"  
  61.                 android:right="10dp"  
  62.                 android:bottom="10dp" />  
  63.         </shape>  
  64.     </item>  
  65. </selector>  


运行效果如下图:
一般状态:


获得焦点状态:


按下状态:

posted @ 2012-04-03 18:02 老马寻途 阅读(5) 评论(0)  编辑
 

[摘]android xml布局文件属性说明

LinearLayout和RelativeLayout

共有属性:
java代码中通过btn1关联次控件
android:id="@+id/btn1"

控件宽度
android:layout_width="80px"    //"80dip"或"80dp"
android:layout_width =“wrap_content”
android:layout_width =“match_parent” 

控件高度
android:layout_height="80px"    //"80dip"或"80dp"
android:layout_height =“wrap_content”
android:layout_height =“match_parent”

控件排布
android:orientation="horizontal”
android:orientation="vertical“

控件间距
android:layout_marginLeft="5dip"      //距离左边
android:layout_marginRight="5dip"      //距离右边
android:layout_marginTop="5dip"      //距离上面
android:layout_marginRight="5dip"      //距离下面

控件显示位置
android:gravity="center"    //left,right, top, bottom
android:gravity="center_horizontal"

android:layout_gravity是本元素对父元素的重力方向。
android:layout_gravity属性则设置控件本身相对于父控件的显示位置
android:gravity是本元素所有子元素的重力方向。

android:layout_gravity="center_vertical"
android:layout_gravity="left"
android:layout_gravity="left|bottom"


TextView中文本字体
android:text="@String/text1"    //在string.xml中定义text1的值
android:textSize="20sp"
android:textColor=”#ff123456”
android:textStyle="bold"    //普通(normal), 斜体(italic),粗斜体(bold_italic)

定义控件是否可见
android:visibility=”visible”     //可见
android:visibility=”invisible”  //不可见,但是在布局中占用的位置还在
android:visibility=”gone”   //不可见,完全从布局中消失

定义背景图片
android:background="@drawable/img_bg"    //img_bg为drawable下的一张图片

seekbar控件背景图片及最大值
android:progressDrawable="@drawable/seekbar_img"  
android:thumb="@drawable/thumb"            
android:max = "60"

 

仅在RelativeLayout中有效:
在父亲布局的相对位置
android:layout_alignParentLeft="true"     //在布局左边
android:layout_alignParentRight="true"    //在布局右边
android:layout_alignParentTop="true"     //在布局上面
android:layout_alignParentBottom="true "  //在布局的下面

在某个控件的相对位置
android:layout_toRightOf="@id/button1"  //在控件button1的右边,不仅仅是紧靠着
android:layout_toLeftOf="@id/button1"   //在控件button2的左边,不仅仅是紧靠着
android:layout_below="@id/button1 "     //在控件button1下面,不仅仅是正下方
android:layout_above=“@id/button1”   //在控件button1下面,不仅仅是正下方

定义和某控件对齐
android:layout_alignTop=”@id/button1”  //和控件button1上对齐
android:layout_alignBottom=”@id/button1”  //和控件button1下对齐
android:layout_alignLeft=”@id/button1”  //和控件button1左对齐
android:layout_alignRight=”@id/button1”  //和控件button2右对齐


android:layout_centerHorizontal="true"        //水平居中
android:layout_centerVertical="true"
android:layout_centerInParent="true"

仅在LinearLayout中有效
设置控件在一排或一列中所占比例值
android:layout_weight="1"

 

EditText的android:hint 

设置EditText为空时输入框内的提示信息。 

android:gravity  
android:gravity属性是对该view 内容的限定.比如一个button 上面的text.  你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity="right"则button上面的文字靠右 

android:layout_gravity 
android:layout_gravity是用来 设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为 例,android:layout_gravity="right"则button靠右 

android:layout_alignParentRight
 
使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。 

android:scaleType: 
android:scaleType是控制图片如何resized/moved来匹对ImageView的size。ImageView.ScaleType / android:scaleType值的意义区别: 

CENTER /center  按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示 

CENTER_CROP / centerCrop  按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽) 

CENTER_INSIDE / centerInside  将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽 

FIT_CENTER / fitCenter  把图片按比例扩大/缩小到View的宽度,居中显示 

FIT_END / fitEnd   把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置 

FIT_START / fitStart  把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置 

FIT_XY / fitXY  把图片不按比例扩大/缩小到View的大小显示 

MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。 

** 要注意一点,Drawable文件夹里面的图片命名是不能大写的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值