Android EditText 输入框
EditText 默认是多行显示的,并且能够自动换行,即当一行显示不完的时候,会自动换到第二行
设置最小行,最多行,单行,多行,自动换行
我们可以通过属性对这种默认行为进行控制
属性 | 说明 |
---|---|
android:minLines="3" | 设置最小行的行数为 3 |
android:maxLines="3" | 设置 EditText 最大的行数为 3 当输入内容超过 maxline,文字会自动向上滚动 |
android:singleLine="true" | 限制 EditText 只允许单行输入,而且不会滚动 |
设置文字间隔
可以通过下述两个属性来设置字的间距
设置字与字的水平间隔
android:textScaleX="1.5"
设置字与字的垂直间隔
android:textScaleY="1.5"
设置英文字母大写类型
可以通过 android:capitalize
属性设置英文字母大写类型
值 | 说明 |
---|---|
none | 默认,不设置 |
sentences | 仅第一个字母大写 |
words | 每一个单词首字母大小,用空格区分单词 |
characters | 每一个英文字母都大写 |
控制 EditText 四周的间隔距离与内部文字与边框间的距离
可以使用 margin 相关属性增加组件相对其它控件的距离
android:marginTop = "5dp"
可以使用属性 padding 增加组件内文字和组件边框的距离
android:paddingTop = "5dp"
EditText 光标位置的控制
如果想要控制 EditText 中的光标移动到指定位置或者选中某些文本
可以使用 EditText 的 setSelection()
方法
方法 | 说明 |
---|---|
setSelection(int index) | 设置光标位置 |
setSelection(int start, int stop) | 选中起始位置与结束位置的中间括的部分 |
setSelectAllOnFocus(true) | 让 EditText 获得焦点时选中全部文本 |
setCursorVisible(false) | 设置光标不显示 |
setSelectionStart() getSelectionEnd() |
获得当前光标的前后位置 |
设置 EditText 获得焦点同时弹出小键盘
有时候我们需要在进入某个 Activity 后让 文本框 立即获得焦点并且弹出键盘
对 EditText 做一些简单的改变就能实现这样的功能
-
让 EditText 获得焦点与清除焦点
请求获取焦点
edit.requestFocus();
清除焦点
edit.clearFocus();
-
获得焦点后,弹出小键盘
-
低版本的系统直接 requestFocus() 就会自动弹出键盘
-
稍微高一点的版本则需要我们设置属性来弹键盘
android:windowSoftInputMode="stateAlwaysVisible"
这个属性是 Activity 主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题
这个属性能影响两件事情- 当有焦点产生时,软键盘是隐藏还是显示
- 是否减少活动主窗口大小以便腾出空间放软键盘
简单点就是有焦点时的键盘控制以及是否减少 Activity 的窗口大小,用来放小键盘有下述值可供选择
可设置多个值,用"|"分开
值 说明 stateUnspecified 软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置 stateUnchanged 当这个 activity 出现时,软键盘将一直保持在上一个 activity 里的状态,无论是隐藏还是显示 stateHidden 用户选择 activity 时,软键盘总是被隐藏 stateAlwaysHidden 当该 Activity 主窗口获取焦点时,软键盘也总是被隐藏 stateVisible 软键盘通常是可见的 stateAlwaysVisible 用户选择 activity 时,软键盘总是显示的状态 adjustUnspecified 默认设置,通常由系统自行决定是隐藏还是显示 adjustResize 该 Activity 总是调整屏幕的大小以便留出软键盘的空间 adjustPan 当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分 可以在 AndroidManifest.xml 为需要弹出小键盘的 Activity 设置这个属性
<activity android:name=".MainActivity" android:label="@string/appname" android:windowSoftInputMode="stateVisible">
然后调用 EditText 对象 requestFocus() 方法就可以了
-
范例
让我们写一个范例来演示进入页面就让 EditText 获得焦点然后弹出键盘
-
创建一个 空的 Android 项目
cn.twle.android.EditText
-
修改
res/values/strings.xml
添加几个字符串<?xml version="1.0" encoding="utf-8" ?> <resources> <string name="app_name">EditText</string> <string name="email">邮箱</string> </resources>
-
修改
activity_main.xml
添加一个 EditText<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/email" android:hint="@string/email" android:inputType="textEmailAddress" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
-
修改
MainActivity.java
添加email.requestFocus();
package cn.twle.android.edittext; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.EditText; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EditText email = ( EditText ) findViewById(R.id.email); email.requestFocus(); } }
-
修改
AndroidManifest.xml
文件添加android:windowSoftInputMode="stateVisible"
属性<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.twle.android.edittext"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:windowSoftInputMode="stateAlwaysVisible"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
运行范例效果如下