Android:密钥侦听器不工作
在OnCreate fragment方法中,我从布局中获取EditText并调用SetOnKeyListener:Android:密钥侦听器不工作,android,xamarin,xamarin.android,onkeylistener,Android,Xamarin,Xamarin.android,Onkeylistener,在OnCreate fragment方法中,我从布局中获取EditText并调用SetOnKeyListener: Aaa = view.FindViewById<EditText>(Resource.Id.aaaText); Aaa.SetOnKeyListener(new LocationKeyListener()); Aaa=view.findviewbyd(Resource.Id.aaaText); Aaa.SetOnKeyListener(新位置KeyListener()
Aaa = view.FindViewById<EditText>(Resource.Id.aaaText);
Aaa.SetOnKeyListener(new LocationKeyListener());
Aaa=view.findviewbyd(Resource.Id.aaaText);
Aaa.SetOnKeyListener(新位置KeyListener());
布局声明:
<EditText
android:id="@+id/aaaText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:imeOptions="actionNext"
style="@style/LocationEditTextStyle"
android:hint="AAA"
app:MvxBind="Text Aaa.Value"/>
<style name="LoginEditTextTheme" parent="Theme.AppCompat">
<item name="colorControlNormal">@color/accentColor</item>
<item name="colorControlActivated">@color/secondaryTextColor</item>
</style>
<style name="LocationEditTextStyle" parent="Widget.AppCompat.EditText">
<item name="android:textAllCaps">true</item>
<item name="android:inputType">textCapCharacters</item>
<item name="android:maxLength">3</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:textSize">@dimen/location_text_size</item>
<item name="android:theme">@style/LocationEditTextTheme</item>
</style>
编辑文本样式:
<EditText
android:id="@+id/aaaText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:imeOptions="actionNext"
style="@style/LocationEditTextStyle"
android:hint="AAA"
app:MvxBind="Text Aaa.Value"/>
<style name="LoginEditTextTheme" parent="Theme.AppCompat">
<item name="colorControlNormal">@color/accentColor</item>
<item name="colorControlActivated">@color/secondaryTextColor</item>
</style>
<style name="LocationEditTextStyle" parent="Widget.AppCompat.EditText">
<item name="android:textAllCaps">true</item>
<item name="android:inputType">textCapCharacters</item>
<item name="android:maxLength">3</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:textSize">@dimen/location_text_size</item>
<item name="android:theme">@style/LocationEditTextTheme</item>
</style>
@颜色/强调色
@颜色/次要文本颜色
真的
字母大小
3.
水平中心
@尺寸/位置\文字\尺寸
@样式/位置EditTextTheme
LocationKeyListener:
<EditText
android:id="@+id/aaaText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:imeOptions="actionNext"
style="@style/LocationEditTextStyle"
android:hint="AAA"
app:MvxBind="Text Aaa.Value"/>
<style name="LoginEditTextTheme" parent="Theme.AppCompat">
<item name="colorControlNormal">@color/accentColor</item>
<item name="colorControlActivated">@color/secondaryTextColor</item>
</style>
<style name="LocationEditTextStyle" parent="Widget.AppCompat.EditText">
<item name="android:textAllCaps">true</item>
<item name="android:inputType">textCapCharacters</item>
<item name="android:maxLength">3</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:textSize">@dimen/location_text_size</item>
<item name="android:theme">@style/LocationEditTextTheme</item>
</style>
问题是当我在EditText中编写时,LocationKeyListener.OnKey方法没有被调用
更新
编辑文本的我的片段:
public abstract class BaseActionFragment<T> : BaseFragment<T> where T : BaseViewModel
{
protected EditText Aaa, Bbb, Ccc, Ddd, Eee;
protected EditText test;
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = base.OnCreateView(inflater, container, savedInstanceState);
Aaa = view.FindViewById<EditText>(Resource.Id.aaaText);
Bbb = view.FindViewById<EditText>(Resource.Id.bbbText);
Ccc = view.FindViewById<EditText>(Resource.Id.cccText);
Ddd = view.FindViewById<EditText>(Resource.Id.dddText);
Eee = view.FindViewById<EditText>(Resource.Id.eeeText);
Aaa.AddLocationTextWatcher(Aaa, Bbb);
Bbb.AddLocationTextWatcher(Aaa, Ccc);
Ccc.AddLocationTextWatcher(Bbb, Ddd);
Ddd.AddLocationTextWatcher(Ccc, Eee);
Eee.AddLocationTextWatcher(Ddd, Aaa);
test = view.FindViewById<EditText>(Resource.Id.testText);
test.SetOnKeyListener(new LocationKeyListener());
test.KeyPress += (sender, args) =>
{
};
return view;
}
}
公共抽象类BaseActionFragment:BaseFragment,其中T:BaseViewModel
{
受保护文本Aaa、Bbb、Ccc、Ddd、Eee;
保护文本测试;
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
视图=base.OnCreateView(充气机、容器、savedInstanceState);
Aaa=view.findviewbyd(Resource.Id.aaaText);
Bbb=view.findviewbyd(Resource.Id.bbbText);
Ccc=view.findviewbyd(Resource.Id.cccText);
Ddd=view.findviewbyd(Resource.Id.dddText);
Eee=view.findviewbyd(Resource.Id.eeeText);
Aaa.AddLocationTextWatcher(Aaa,Bbb);
Bbb.AddLocationTextWatcher(Aaa、Ccc);
Ccc.AddLocationTextWatcher(Bbb,Ddd);
Ddd.AddLocationTextWatcher(Ccc,Eee);
Eee.AddLocationTextWatcher(Ddd,Aaa);
test=view.findviewbyd(Resource.Id.testText);
test.SetOnKeyListener(新位置KeyListener());
test.KeyPress+=(发送方,参数)=>
{
};
返回视图;
}
}
这是我的主容器视图:
[Activity(
Theme = "@style/AppTheme")]
public class MainContainerActivity : BaseActivity<MainContainerViewModel>, IDrawerActivity
{
protected override int ActivityLayoutId => Resource.Layout.activity_main_container;
public DrawerLayout DrawerLayout { get; private set; }
protected MvxActionBarDrawerToggle DrawerToggle { get; private set; }
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
DrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
SetupDrawerLayout();
DrawerToggle.SyncState();
if (bundle == null)
ViewModel.ShowMenuCommand.Execute();
}
private void SetupDrawerLayout()
{
SupportActionBar?.SetDisplayHomeAsUpEnabled(true);
DrawerToggle = new MvxActionBarDrawerToggle(
this, // host Activity
DrawerLayout, // DrawerLayout object
Toolbar, // nav drawer icon to replace 'Up' caret
Resource.String.drawer_open, // "open drawer" description
Resource.String.drawer_close // "close drawer" description
);
DrawerToggle.DrawerOpened += (sender, e) => HideSoftKeyboard();
DrawerLayout.AddDrawerListener(DrawerToggle);
}
public override void OnBackPressed()
{
if (DrawerLayout != null && DrawerLayout.IsDrawerOpen(GravityCompat.Start))
DrawerLayout.CloseDrawers();
else
base.OnBackPressed();
}
public override void OnConfigurationChanged(Configuration newConfig)
{
base.OnConfigurationChanged(newConfig);
DrawerToggle.OnConfigurationChanged(newConfig);
}
public void HideSoftKeyboard()
{
if (CurrentFocus != null)
{
var inputMethodManager = (InputMethodManager)GetSystemService(InputMethodService);
inputMethodManager.HideSoftInputFromWindow(CurrentFocus.WindowToken, 0);
CurrentFocus.ClearFocus();
}
}
}
[活动](
Theme=“@style/AppTheme”)]
公共类MainContainerActivity:BaseActivity、IDraEventivity
{
受保护的覆盖int-ActivityLayoutId=>Resource.Layout.activity\u主容器;
公共抽屉布局抽屉布局{get;private set;}
受保护的MvxActionBarDrawerToggle抽屉切换{get;private set;}
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
抽屉布局=FindViewById(Resource.Id.drawer\u布局);
SetupDrawerLayout();
DrawerToggle.SyncState();
if(bundle==null)
ViewModel.ShowMenuCommand.Execute();
}
专用void SetupDrawerLayout()
{
SupportActionBar?.SetDisplayHomeAsUpEnabled(真);
抽屉切换=新的MvxActionBarDrawerToggle(
此,//主机活动
抽屉布局,//抽屉布局对象
工具栏,//导航抽屉图标以替换“Up”插入符号
Resource.String.drawer\u open,/“open drawer”说明
Resource.String.drawer\u close/“close drawer”说明
);
抽屉切换。抽屉连接+=(发送方,e)=>隐藏键盘();
抽屉布局。添加抽屉链接(抽屉切换);
}
public override void OnBackPressed()
{
if(DrawerLayout!=null&&DrawerLayout.IsDrawerOpen(GravityCompat.Start))
抽屉布局;
其他的
base.OnBackPressed();
}
公共覆盖无效OnConfigurationChanged(配置newConfig)
{
base.OnConfigurationChanged(newConfig);
DrawerToggle.OnConfigurationChanged(newConfig);
}
public void HideSoftKeyboard()
{
if(CurrentFocus!=null)
{
var inputMethodManager=(inputMethodManager)GetSystemService(InputMethodService);
inputMethodManager.HideSoftInputFromWindow(CurrentFocus.WindowToken,0);
CurrentFocus.ClearFocus();
}
}
}
也许这是因为所有这些都在片段中,虽然这是一个老话题,但我遇到了相同的问题,请注意View.IOnKeyListener不支持软键盘(虚拟键盘)键输入。只有硬件键盘输入通过OnKey事件执行 根据您的使用情况,如果您希望在按下任何软键盘按钮(如Keycode.NavigateNext按钮)时收到通知,请使用EditorAction事件。在Xamarin.表单中,例如定义自定义条目呈现器,在OnElementChanged事件中,通过以下方式侦听事件:
this.EditText.EditorAction += EditTextOnEditorAction;
而不是处理您感兴趣的任何关键操作:
private void EditTextOnEditorAction(object sender, TextView.EditorActionEventArgs e)
{
if (e.ActionId == ImeAction.Next)
{
var formsNextSearch = FocusSearchNextElement();
if (formsNextSearch != null)
{
EditText.ClearFocus();
}
}
}
我试过你的sampe(不带款式),效果不错。也许只是删除debug和obj文件夹并重建…它在操作系统(Windows)上运行的模拟器上工作,但是当我在真实的手机上调试时,它就不工作了。你是在模拟器上还是在真手机上调试的?@NikitaGoncharuk如果你在
EditText
上测试LocationKeyListener
而不测试app:MvxBind
,会怎么样?@foxanna否,删除app:MvxBind
不会帮助我测试你的代码(使用MvvmCross),无法重现这个问题。你能发布更详细的代码吗?或者分享一个基本的演示,通过在线回购重现问题