类别:.Net相关知识 / 日期:2014-09-30 / 浏览:5763 / 评论:0

1.提出问题 因为公司的需要,最近一直都在做安卓的软件,因为本身是学.Net的,所以Mono成了我的首选,这次遇到的问题就是在登录界面输入用户名或者密码后,点击空白地方虚拟键盘不能自动的隐藏,之前做Windows App Store开发的时候就没有遇到过这个问题,经过一番Google后,找到了解决方法。

2.解决问题 首先看下我的界面

后台代码如下

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/svLogin" android:scrollbars="vertical" android:fadingEdge="vertical">
  <LinearLayout android:orientation="vertical" android:gravity="center_horizontal" android:focusableInTouchMode="true" android:focusable="true" android:layout_width="fill_parent" android:layout_height="fill_parent">
    <TextView android:text="用户登录" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/titileView" android:layout_marginTop="200px" />
    <EditText android:inputType="text" android:layout_width="500px" android:layout_height="wrap_content" android:id="@+id/etUserName" android:layout_marginTop="40px" android:text="张建国" />
    <EditText android:inputType="textPassword" android:layout_width="500px" android:layout_height="wrap_content" android:id="@+id/etPassword" android:text="123456" />
    <TextView android:textAppearance="?android:attr/textAppearanceSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/txtInfo" android:layout_marginTop="20px" />
    <Button android:text="登录" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnLogin" android:layout_marginLeft="100px" android:layout_marginRight="100px" android:layout_marginTop="30px" />
  </LinearLayout>
</ScrollView>


要实现这个功能最重要的就是需要一个除了EditText外可以找到一个可以获取焦点的控件,这里推荐大家选择EditText外层的LinearLayout等控件。
这里首先需要一个继承了Activity和View.IOnTouchListener接口的一个类,类的代码如下。
public class LoginOnTouchListener : Activity, View.IOnTouchListener
{
    protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); }
    public bool OnTouch(View v, MotionEvent e)
    {
        var userName = v.FindViewById<EditText>(Resource.Id.etUserName); var password = v.FindViewById<EditText>(Resource.Id.etPassword); if (userName.IsFocused)
        {
            userName.ClearFocus(); InputMethodManager imm =
(InputMethodManager)v.Context.GetSystemService(InputMethodService); imm.HideSoftInputFromWindow(v.WindowToken, 0);
        }
        if (password.IsFocused)
        {
            password.ClearFocus(); InputMethodManager imm =
(InputMethodManager)v.Context.GetSystemService(InputMethodService); imm.HideSoftInputFromWindow(v.WindowToken, 0);
        }
        return false;
    }
}


然后Activity中去注册最外部的布局控件的SetOnTouchListener方法,具体的代码如下

public class LoginActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        var loginScrollView = FindViewById<ScrollView>(Resource.Id.svLogin); loginScrollView.SetOnTouchListener(new LoginOnTouchListener());
    }
}

这样就可以实现,点击屏幕空白处隐藏虚拟键盘并且取消焦点了。

可能感兴趣的文章

评论区

发表评论 /

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。