从微调器中移除焦点

Posted

技术标签:

【中文标题】从微调器中移除焦点【英文标题】:Removing focus from spinner 【发布时间】:2016-02-26 06:58:02 【问题描述】:

我希望创建一个搜索功能,其中我有一个编辑文本,并且我在它下面放置了一个微调器。当我在编辑文本中键入任何内容时,有一个数组,我从中比较在编辑文本中键入的字母,过滤数组元素后,我将它们添加到微调器中并打开微调器。

我面临的问题是,当微调器打开时,edittext 失去焦点,我需要关闭微调器才能再次开始输入。

我附上代码,请有任何想法的人帮助我:

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_
        android:layout_

       android:orientation="vertical"

        >
        <EditText
            android:id="@+id/edittext"
            android:layout_
            android:layout_
            android:focusableInTouchMode="true"
            />
        <Spinner
            android:id="@+id/edit_spinner"
            android:layout_
            android:layout_
            android:focusableInTouchMode="false"
            />

    </LinearLayout>
</RelativeLayout>

活动:

public class MainActivity extends AppCompatActivity 

    EditText editText;
    Spinner spinner;
    ArrayList<String> mylist;
    String[] strngarray;
    ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mylist = new ArrayList<>();
        strngarray = getResources().getStringArray(R.array.planets_array);
        for(int i=0;i<strngarray.length;i++)
        
            mylist.add(strngarray[i]);

        

        textView = (TextView) findViewById(R.id.tv);
        editText = (EditText) findViewById(R.id.edittext);
        spinner = (Spinner) findViewById(R.id.edit_spinner);
        adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,(List)mylist);
// Specify the layout to use when the list of choices appears
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
        spinner.setAdapter(adapter);
        editText.addTextChangedListener(new TextWatcher() 
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) 
                Log.d("TextWatcher","before changed Char : "+s);
            

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) 
                Log.d("TextWatcher", "on changed Char : " + s);
if(!s.equals("")) 

    mylist.clear();

    for (int i = 0; i < strngarray.length; i++) 
        String temp = strngarray[i].toLowerCase();
        String prefix = s.toString().toLowerCase();
        if (temp.startsWith(prefix)) 
            mylist.add(strngarray[i]);
        

    
    if (mylist.size() != 0) 
        adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, (List) mylist);
        adapter.notifyDataSetChanged();
        spinner.performClick();
        spinner.clearFocus();
        editText.requestFocus();
    

            

            @Override
            public void afterTextChanged(Editable s) 
                Log.d("TextWatcher","after changed Char : "+s);
            
        );

    



【问题讨论】:

【参考方案1】:

您可以实现 AutoCompleteTextView,而不是使用 TextView 和 Spinner。

这允许在用户输入时提供建议。 您可以使用适配器绑定要搜索的数据。

可以找到一个可能有用的例子here.

【讨论】:

以上是关于从微调器中移除焦点的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UITextField 中移除焦点?

如何从提交按钮中移除焦点

WPF:如何以编程方式从 TextBox 中移除焦点

如何从主 QWidget 中移除 QGraphicsTextItem 的焦点

如何从 ScrollView 内的 RecyclerView 中移除焦点?

从文本字段中移除焦点