Android AutoCompleteTextView在华为设备中不工作
我有一个应用程序,它使用Android AutoCompleteTextView在华为设备中不工作,android,android-fragments,autocomplete,Android,Android Fragments,Autocomplete,我有一个应用程序,它使用AutoCompleteTextView显示机场建议。我的应用程序支持两种语言-英语和阿拉伯语。我已经在对话框视图中实现了这个自动完成文本视图。我使用的代码如下: final AutoCompleteTextView fromactv = (AutoCompleteTextView) fromDialog.findViewById(R.id.autoCompleteTextView1d); final TextView no_match_tv
AutoCompleteTextView
显示机场建议。我的应用程序支持两种语言-英语和阿拉伯语。我已经在对话框视图
中实现了这个自动完成文本视图
。我使用的代码如下:
final AutoCompleteTextView fromactv = (AutoCompleteTextView) fromDialog.findViewById(R.id.autoCompleteTextView1d);
final TextView no_match_tv = (TextView) fromDialog.findViewById(R.id.tv_no_match);
final ImageButton close = (ImageButton) fromDialog.findViewById(R.id.ib_close);
fromactv.setText(null);
final InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
OnItemClickListener onitem=new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
String actvstringfrom = fromactv.getText().toString();
String resource[];
if(CommonFunctions.lang.equalsIgnoreCase("ar")){
resource = actvstringfrom.split(" \t ");
actvstringfrom = resource[0];
}
strFromCity = actvstringfrom;
resource = actvstringfrom.split("-");
strFromCode = resource[3];
strFromCode = strFromCode.replace(" ", "");
tvFromCode.setText(strFromCode);
tvFromCity.setText(strFromCity);
if(resource[1].toLowerCase().contains("all airport") ||
resource[1].toLowerCase().contains("جميع المطار"))
allAirportFrom = "Y";
else
allAirportFrom = "N";
Editor editor = sharedpreferences.edit();
editor.putString("strFromCode", strFromCode);
editor.putString("allAirportFrom", allAirportFrom);
editor.commit();
fromDialog.dismiss();
}
};
fromactv.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
String filter = s.toString().toLowerCase();
listItems = new ArrayList<String>();
for (String listItem : arrayAirportList) {
if (listItem.toLowerCase().contains(filter))
{
listItems.add(listItem);
}
}
if (listItems.size() == 0)
{
if(no_match_tv.getVisibility() == View.GONE)
no_match_tv.setVisibility(View.VISIBLE);
}
else
{
if(no_match_tv.getVisibility() == View.VISIBLE)
no_match_tv.setVisibility(View.GONE);
}
ArrayAdapter<String> adapt = new ArrayAdapter<String>(getActivity(),
R.layout.tv_autocomplete, listItems);
fromactv.setAdapter(adapt);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
fromactv.setOnItemClickListener(onitem);
fromDialog.show();
ACTV的最终自动完成文本视图=(自动完成文本视图)fromDialog.findViewById(R.id.autoCompleteTextView1d);
final TextView no_match_tv=(TextView)fromDialog.findViewById(R.id.tv no_match);
final ImageButton close=(ImageButton)fromDialog.findViewById(R.id.ib_close);
fromactv.setText(空);
最终InputMethodManager imm=(InputMethodManager)getActivity().getSystemService(Context.INPUT\u方法\u服务);
imm.toggleSoftInput(InputMethodManager.SHOW\u强制,0);
OnItemClickListener onitem=新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//TODO自动生成的方法存根
imm.toggleSoftInput(仅InputMethodManager.HIDE\u隐式\u,0);
字符串actvstringfrom=fromactv.getText().toString();
字符串资源[];
if(CommonFunctions.lang.equalsIgnoreCase(“ar”)){
resource=actvstringfrom.split(“\t”);
actvstringfrom=资源[0];
}
strFromCity=actvstringfrom;
resource=actvstringfrom.split(“-”);
strFromCode=资源[3];
strFromCode=strFromCode.replace(“,”);
tvFromCode.setText(strFromCode);
tvFromCity.setText(strFromCity);
如果(资源[1].toLowerCase()包含(“所有机场”)||
资源[1].toLowerCase().contains(包含)
allAirportFrom=“Y”;
其他的
allAirportFrom=“N”;
Editor=SharedReferences.edit();
putString(“strFromCode”,strFromCode);
编辑器.putString(“allAirportFrom”,allAirportFrom);
commit();
fromDialog.disclose();
}
};
fromactv.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列,int start,int before,
整数计数){
字符串筛选器=s.toString().toLowerCase();
listItems=new ArrayList();
for(字符串列表项:arrayAirportList){
if(listItem.toLowerCase().contains(筛选器))
{
添加(listItem);
}
}
if(listItems.size()==0)
{
if(不匹配\u tv.getVisibility()==View.GONE)
无匹配电视设置可见性(View.VISIBLE);
}
其他的
{
if(不匹配\u tv.getVisibility()==View.VISIBLE)
无匹配电视设置可见性(视图已消失);
}
ArrayAdapter adapt=新的ArrayAdapter(getActivity(),
R.layout.tv_自动完成,列表项);
来自ACTV.setAdapter(自适应);
}
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
来自Actv.setOnItemClickListener(onitem);
fromDialog.show();
除了荣誉设备外,此代码对大多数手机都适用。这一问题只有阿拉伯文版本。有人经历过这样的问题吗?我该怎么办
提前谢谢 终于弄清了真相: 由于某些模糊的原因,华为设备在设置为“填充父项”或“匹配父项”时,以及在将设备设置为RTL语言(如希伯来语或阿拉伯语)时,无法将自动完成弹出窗口宽度设置为父项的宽度。 我找到了一个解决办法(没有这么漂亮,但这是我得到的最好的):
AutoCompleteTextView字段=(AutoCompleteTextView)findViewById();
字符串制造商=Build.manufacturer;
if(制造商等于(“华为”)){
视图父项=(视图)字段。getParent();
int width=parent.getWidth();
字段。设置下拉宽度(宽度);
}
这段代码似乎在RTL和非RTL语言上都能正常工作。
B.T.W:你可以跳过IF,它仍然适用于所有其他设备。我添加它是为了强调它是针对特定设备的解决方法。这里也一样。。。使用P9设备和希伯来语感谢您的回复。我试试这个。
AutoCompleteTextView field = (AutoCompleteTextView)findViewById(<YOUR_ID>);
String manufacturer = Build.MANUFACTURER;
if(manufacturer.equals("HUAWEI")){
View parent = (View)field.getParent();
int width = parent.getWidth();
field.setDropDownWidth(width);
}