广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    android基础教程之android的listview与edittext冲突解决方法

    2018-04-16 10:58:17 次阅读 稿源:互联网
    广告

    最近遇到一个关于android软键盘的问题。在ListView中每个Item中都有个EditText,在最后的几个Item中,EditText第一次点击界面还能向上弹出,正常显示,

    但第二次点击时,软件盘就把最后的几个Item给正当住了。这样很影响用户体验的。

    其实解决的办法只要想一下,我相信有经验的开发人员就能够想到,让软键盘在消失的时候让相应Item中的EditText消失焦点clearFouce();但是有个关键的问题,

    就是在获得返回事件的时候,如果获得的事件不对那就不会达到想要的效果。这个back时间一定要是自定Layout中的back事件才可以。

    直接上代码。

    代码如下:

    <cn.test.systemSetting.MyLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/keyboardlayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/main_bg"
        android:orientation="vertical" >
        <ListView
                    android:id="@+id/lv_data"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_weight="1"
                    android:cacheColorHint="#00000000"
                    android:transcriptMode="normal"
                    >
         </ListView>
    </cn.test.systemSetting.MyLayout>

    自定义layout中所作的处理:
    代码如下:

    package cn.test.systemSetting;

    import com.********.R;

    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.KeyEvent;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    /**
     *
     * 针对设备管理键盘事件的处理
     * divid小硕
     *
     * **/

    public class MyLayout extends LinearLayout {
        private Context context;
        public MyLayout(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
            this.context=context;
            LayoutInflater.from(context).inflate(R.layout.device_manager, this);//此处所加载的layout就是上面的xml,即它的名字就是device_manager.xml
        }
        public MyLayout(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            // TODO Auto-generated constructor stub
        }

       
        public MyLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            // TODO Auto-generated constructor stub
        }
        @Override
        public boolean dispatchKeyEventPreIme(KeyEvent event) {
            // TODO Auto-generated method stub
            if(context!=null){
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                if(imm.isActive() && event.getKeyCode() == KeyEvent.KEYCODE_BACK){
                    View view = DeviceManagerActivity.lv_data.getFocusedChild();
                    if(view!=null){
                        view.clearFocus();
                    }

                }
            }

            return super.dispatchKeyEventPreIme(event);
        }
    }

    主界面所采用的加载方式要是这样的:
    代码如下:

    public class DeviceManagerActivity extends Activity implements OnClickListener{
        public static ListView lv_data;
        static DevMgrAdapter adapter;

        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 1.全屏
            requestWindowFeature(Window.FEATURE_NO_TITLE); // 无标题
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);

            this.setContentView(new MyLayout(this));
            init();
        }
    }

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告