为什么在android studio项目中键盘会改变,编辑文本框会失去焦点?
好的,第一次海报。我在高中教书,第一年的工作没有导师的帮助,所以如果我的代码是垃圾,温柔一点 问题:此程序用于保存正在出售的馅饼的库存。在XML中,我有一个线性布局,listview,最后是一个线性布局。listview通过一个自定义适配器显示当前的弹出列表,并有一个编辑文本来更新计数。最后一个线性布局具有编辑文本,可向arraylist添加新的PoStart。添加此代码后,每当我在listview中选择编辑文本(我强制将其作为输入类型:“数字”)时,数字键盘就会弹出,然后消失,被普通的qwerty键盘替换,编辑文本框会失去焦点。如果我快速点击编辑文本框3-4次,它将保持数字键盘向上并保持焦点。我就是不明白为什么焦点和键盘都在改变为什么在android studio项目中键盘会改变,编辑文本框会失去焦点?,android,xml,android-softkeyboard,Android,Xml,Android Softkeyboard,好的,第一次海报。我在高中教书,第一年的工作没有导师的帮助,所以如果我的代码是垃圾,温柔一点 问题:此程序用于保存正在出售的馅饼的库存。在XML中,我有一个线性布局,listview,最后是一个线性布局。listview通过一个自定义适配器显示当前的弹出列表,并有一个编辑文本来更新计数。最后一个线性布局具有编辑文本,可向arraylist添加新的PoStart。添加此代码后,每当我在listview中选择编辑文本(我强制将其作为输入类型:“数字”)时,数字键盘就会弹出,然后消失,被普通的qwer
<LinearLayout
...
<TextView
...
<TextView
...
<TextView
...
<TextView
...
<TextView
...
</LinearLayout>
<ListView
android:layout_below="@+id/flavor"
android:id="@+id/simpleListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#000"
android:dividerHeight="2dp"
android:layout_weight="1"
android:layout_gravity="top" />
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="0dp"
android:layout_weight="1">
<EditText
android:id="@+id/newFlavor"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Flavor"
android:textSize="10pt"
/>
<CheckBox
android:id="@+id/isSeasonal"
android:layout_width="0dp"
android:layout_height="match_parent"
android:checked="false"
/>
<EditText
android:id="@+id/newCurrent"
android:layout_width="0dp"
android:maxLength="3"
android:layout_height="wrap_content"
android:hint="Current"
android:textSize="10pt"
/>
<EditText
android:id="@+id/newMax"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:maxLength="3"
android:hint="Max"
android:textSize="10pt"
/>
<Button
android:id="@+id/addNewFlavor"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textSize="10pt"
android:text="Add"
android:layout_weight="1" />
</LinearLayout>
我认为您的列表视图\u inventory.xml应该如下所示,只是在您的编辑文本中添加了android:inputType=“number”
...
<EditText
android:id="@+id/edit_text"
android:maxLength="3"
android:paddingLeft="25dp"
android:layout_width="75dp"
android:inputType="number"
android:layout_height="wrap_content"
android:paddingRight="30dp"
android:layout_weight="1" >
<requestFocus />
</EditText>
...
您甚至可以在适配器的getView()
方法中删除将输入类型设置为EditText的代码
引用Android文档
每当ListView需要显示特定的数据行时,它都会请求关联的适配器通过getView()方法提供与该位置的数据对应的视图。每当需要在屏幕上更新视图时(例如,在创建/滚动等过程中),就会出现这种情况
因此,每当调用getView()
时,都会指定inputType=“number”
,然后返回到默认的inputType和popsup qwerty键盘
我想这会解决你的问题
编辑
所以你可以使用下面的
android:focusableInTouchMode="true"
为了得到想要的结果,删除Android 7中以前的
,我没有看到这个问题,但我最近在旧版本的Android上也遇到了这个问题
我通过添加以下三个解决了这个问题
1:在列表视图上设置android:DegenantFocusability=“AfterDegenders”。
在子代之后关注子代
在API级别1中添加
int FOCUS\u在子代之后
此视图只有在其后代都不需要时才会获得焦点
2:将以下内容添加到编辑文本中
android:focusable=“true”
android:focusableInTouchMode=“true”
3:将android:WindowsOfInputMode=“adjustResize”添加到清单文件的活动中。所以,即使出现键盘,您的列表也可以滚动
PS:如果有人面临同样的问题,我希望这能对他们有所帮助。为什么强制输入类型,你可以用xml编写,android:inputType=“number”所以我先尝试了这个解决方案,然后尝试在适配器中强制输入。我回去取出XML中的所有输入要求。我现在遇到的问题是,当我在listview中选择EditText时,它会再次失去焦点,直到第二次选择时,它才会保持焦点。所以我认为这不是一个输入问题,而是一个焦点问题。更新答案,尝试实现它。这很有效。我不希望编辑文本具有焦点,除非触摸,否则会导致在创建时自动选择编辑文本,这是不需要的。此外,即使使用inputType=“number”,仍然会出现错误的键盘。数字键盘弹出,然后立即消失#我确实删除了我的问题。我在安卓6.0.1中遇到了这个问题。更改后第一行的第一个文本视图仍有问题。
...
<EditText
android:id="@+id/edit_text"
android:maxLength="3"
android:paddingLeft="25dp"
android:layout_width="75dp"
android:inputType="number"
android:layout_height="wrap_content"
android:paddingRight="30dp"
android:layout_weight="1" >
<requestFocus />
</EditText>
...
edittext.requestFocus();
android:focusableInTouchMode="true"