Android用软键盘将整个界面推上去解决方案
来源:互联网 发布:淘宝小号挂机赚钱 编辑:程序博客网 时间:2024/04/29 13:28
http://ipjmc.iteye.com/blog/1439657#comments
在Android UI中,我们常常会使用EditText,当用户点击这个EditText时会触发软键盘,这个软键盘会把EditText以下的界面挡住,有时候我们希望用户看到完整的界面,就像下图这样:
原理很简单,将布局的最外层添加一个ScrollView,当用户点击EditText时,将ScrollView滚动到底,废话不说,直接上代码
AndroidMainfest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.ipjmc.demo.inputmethod"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk android:minSdkVersion="8" />
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name" >
- <activity
- android:label="@string/app_name"
- android:name=".InputMethodActivity"
- <!--只有用户点击了编辑框才显示软键盘,并且会导致原有界面重新布局-->
- android:windowSoftInputMode="stateHidden|adjustResize" >
- <intent-filter >
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
在布局页面中,我们在最外层使用了ScrollView,由于软键盘的弹出,原有界面从新布局,使得用户可以滚动界面。
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <ScrollView android:id="@+id/scroll" xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent" android:layout_height="match_parent"
- android:fillViewport="true" >
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <TextView android:text="@string/hello" android:textColor="#000"
- android:layout_width="fill_parent" android:layout_height="300dip"
- android:background="#0000FF" />
- <EditText android:id="@+id/edit"
- android:layout_width="match_parent" android:layout_height="wrap_content"/>
- <Button android:id="@+id/button" android:text="提交"
- android:layout_width="match_parent" android:layout_height="wrap_content"/>
- </LinearLayout>
- </ScrollView>
下面是代码的逻辑部分,比较简单
- package com.ipjmc.demo.inputmethod;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ScrollView;
- import android.util.Log;
- import android.view.View;
- public class InputMethodActivity extends Activity implements View.OnClickListener {
- private static final String TAG = "Scroll";
- private EditText mEdit;
- private Button mButton;
- private ScrollView mScrollView;
- private Handler mHandler = new Handler();
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mScrollView = (ScrollView) findViewById(R.id.scroll);
- mEdit = (EditText) findViewById(R.id.edit);
- mButton = (Button) findViewById(R.id.button);
- mEdit.setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- //这里必须要给一个延迟,如果不加延迟则没有效果。我现在还没想明白为什么
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- //将ScrollView滚动到底
- mScrollView.fullScroll(View.FOCUS_DOWN);
- }
- }, 100);
- }
- }
至于为什么要用Handler来延迟的问题,答案是:http://blog.csdn.net/t12x3456/article/details/12799825
因为Android很多函数都是基于消息队列来同步,所以需要异步操作,
addView完之后,不等于马上就会显示,而是在队列中等待处理,虽然很快,但是如果立即调用fullScroll, view可能还没有显示出来,所以会失败,应该通过handler在新线程中更新
addView完之后,不等于马上就会显示,而是在队列中等待处理,虽然很快,但是如果立即调用fullScroll, view可能还没有显示出来,所以会失败,应该通过handler在新线程中更新
0 0
- Android用软键盘将整个界面推上去解决方案
- Android用软键盘将整个界面推上去
- Android用软键盘将整个界面推上去
- Android用软键盘将整个界面推上去
- 解决Android 弹出软键盘将整个界面上移的问题
- Android软键盘弹出界面遮挡解决方案。
- 关于Android软键盘弹出,会把原来的界面挤上去
- android软键盘弹出,会把原来的界面挤上去的问题 处理方法
- 关于Android软键盘弹出,会把原来的界面挤上去的问题
- android 关于软键盘会把界面布局挤上去的解决办法
- 如何解决 Android 软键盘弹出,会把原来的界面挤上去的问题?
- android软键盘弹出,会把原来的界面挤上去的问题 处理方法
- 关于Android软键盘弹出,会把原来的界面挤上去的问题
- 关于Android软键盘弹出,会把原来的界面挤上去的问题
- Android防止软键盘会把原来的界面挤上去的问题
- Android软键盘弹出,RelativeLayout 布局会把原来的界面挤上去
- Android软键盘弹出时,会把原来的界面挤上去
- Android 软键盘弹出时把布局顶上去或者覆盖上去需求解决方案
- java语言编程,求两个字符串的最大子串
- (mark)git错误fatal: remote origin already exists解决办法
- win7(64)未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序
- 刷题-Symmetric Tree 缺python
- JS对象转URL参数(原生JS和jQuery两种方式)
- Android用软键盘将整个界面推上去解决方案
- SqlServer忘记密码解决办法
- HTTP协议--压缩 (三)
- win解决Win8下不能搜索文件内容问题
- jps无法显示jvm进程
- HTML5权威指南读书笔记【第三部分】
- 国内外DNS服务器地址列表
- 如何杀掉D,Z状态的进程
- 删除文件夹里的 .svn