如何使用 Android Studio 实现自动建议 UI?
How to implement the auto-suggest UI using Android Studio?
我正在编写照片应用程序。用户可以点击一个人的照片并对其进行标记。我想按如下方式实现标记:
- 1) 用户看着照片并认出了 John Smith。
- 2) 用户点击文本输入框。
- 3) 用户开始输入 'Jo...'
- 4) 出现一个建议的 gmail 帐户列表 供用户选择(例如 johny123@gmail.com、johnsmith@gmail.com、joanna@ gmail.com).
- 5) 用户点击列表中的正确帐户 (johnsmith@gmail.com)。
- 6) 照片上标有用户选择的帐户。
除了第四部分,我已经实现了很多部分。下面我给出当前 UI:
的代码
// This method is invoked after the user finishes typing and clicks enter.
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
// other code
...
String usersEntry = textView.getText().toString();
tagPhotoWith(usersLabel);
return true;
}
目前,用户输入的任何文本在用户点击回车后都会成为照片标签。相反,我希望该应用程序显示建议的 gmail.com 帐户列表,以便用户可以 select 适当的帐户进行标记。 怎么做?
您必须使用 AutoCompleteTextView 来获取已保存字符串的建议(在您的情况下,它们是电子邮件 ID,无论是从数据库中获取还是在某个时间在程序中预定义)。
此处,在 AutoCompleteTextView 上设置了一个适配器,以便在用户键入字符串的 2 或 3 个字符后立即为输入框设置字符串 array/Arraylist。
AutoCompleteTextView textProductView;
textProductView = (AutoCompleteTextView) findViewById(R.id.txtItem);
ArrayAdapter<String> etAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, ITEMS);
textProductView.setAdapter(etAdapter);
此处,ITEMS 是一个字符串数组,根据从 user/database 获取的数据或在 activity 中预定义的数据定义。
如果你想用好的 GUI 显示自动完成,你可以选择弹出窗口,或者你可以使用自定义列表视图或回收视图,并在你的活动中使用 setvisibility Gone/Visible 和 xml。
我已经为我的应用准备了使用 Listview 视图的自定义自动搜索,如下所示。
//activity_main.xml
<LinearLayout
// parent layout
android:orientation="vertical"
>
< .... /* your code for toolbar */ ..../>
<Edittext
android:id="@+id/edittext"
/* your customization*/
/>
<Relativelayou
android:height="match_parent"
android:width=""match_parent"
>
<LinearLayout > /*your main xml code*/ </LinearLayout>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lstvw"
android:dividerHeight="0dp"
android:visibility="gone">
</ListView>
</RelativeLayout>
在您的 MainActivity 中使用 EditText.addTextChangedListener。
//MainActivity.java
EditText ed;
ListView lst;
ArrayList<String> array=new ArrayList<>();
ArrayList<String> array1=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed= (EditText) findViewById(R.id.edtxt);
lst= (ListView) findViewById(R.id.lstvw);
lst.setVisibility(View.GONE);
ed.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int ount, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String str=ed.getText().toString();
array1.clear();
lst.setVisibility(View.VISIBLE);
for(int i=0;i<array.size();i++)
{
if(array.get(i).toLowerCase().startsWith(str.toLowerCase()))
{
array1.add(array.get(i));
}
}
if((ArrayAdapter<String> )lst.getAdapter()!=null){
((ArrayAdapter<String> )lst.getAdapter()).notifyDataSetChanged();}
}
@Override
public void afterTextChanged(Editable s) {
}
});
lst.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
lst.setVisibility(View.GONE);
}
});
ArrayAdapter<String> ad=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,array1);
ad.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
lst.setAdapter(ad);
}}
在这里您可以根据您的设计使用自定义列表视图行。
希望对您有所帮助!!!
我正在编写照片应用程序。用户可以点击一个人的照片并对其进行标记。我想按如下方式实现标记:
- 1) 用户看着照片并认出了 John Smith。
- 2) 用户点击文本输入框。
- 3) 用户开始输入 'Jo...'
- 4) 出现一个建议的 gmail 帐户列表 供用户选择(例如 johny123@gmail.com、johnsmith@gmail.com、joanna@ gmail.com).
- 5) 用户点击列表中的正确帐户 (johnsmith@gmail.com)。
- 6) 照片上标有用户选择的帐户。
除了第四部分,我已经实现了很多部分。下面我给出当前 UI:
的代码// This method is invoked after the user finishes typing and clicks enter.
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
// other code
...
String usersEntry = textView.getText().toString();
tagPhotoWith(usersLabel);
return true;
}
目前,用户输入的任何文本在用户点击回车后都会成为照片标签。相反,我希望该应用程序显示建议的 gmail.com 帐户列表,以便用户可以 select 适当的帐户进行标记。 怎么做?
您必须使用 AutoCompleteTextView 来获取已保存字符串的建议(在您的情况下,它们是电子邮件 ID,无论是从数据库中获取还是在某个时间在程序中预定义)。
此处,在 AutoCompleteTextView 上设置了一个适配器,以便在用户键入字符串的 2 或 3 个字符后立即为输入框设置字符串 array/Arraylist。
AutoCompleteTextView textProductView;
textProductView = (AutoCompleteTextView) findViewById(R.id.txtItem);
ArrayAdapter<String> etAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, ITEMS);
textProductView.setAdapter(etAdapter);
此处,ITEMS 是一个字符串数组,根据从 user/database 获取的数据或在 activity 中预定义的数据定义。
如果你想用好的 GUI 显示自动完成,你可以选择弹出窗口,或者你可以使用自定义列表视图或回收视图,并在你的活动中使用 setvisibility Gone/Visible 和 xml。
我已经为我的应用准备了使用 Listview 视图的自定义自动搜索,如下所示。
//activity_main.xml
<LinearLayout
// parent layout
android:orientation="vertical"
>
< .... /* your code for toolbar */ ..../>
<Edittext
android:id="@+id/edittext"
/* your customization*/
/>
<Relativelayou
android:height="match_parent"
android:width=""match_parent"
>
<LinearLayout > /*your main xml code*/ </LinearLayout>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lstvw"
android:dividerHeight="0dp"
android:visibility="gone">
</ListView>
</RelativeLayout>
在您的 MainActivity 中使用 EditText.addTextChangedListener。
//MainActivity.java
EditText ed;
ListView lst;
ArrayList<String> array=new ArrayList<>();
ArrayList<String> array1=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed= (EditText) findViewById(R.id.edtxt);
lst= (ListView) findViewById(R.id.lstvw);
lst.setVisibility(View.GONE);
ed.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int ount, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String str=ed.getText().toString();
array1.clear();
lst.setVisibility(View.VISIBLE);
for(int i=0;i<array.size();i++)
{
if(array.get(i).toLowerCase().startsWith(str.toLowerCase()))
{
array1.add(array.get(i));
}
}
if((ArrayAdapter<String> )lst.getAdapter()!=null){
((ArrayAdapter<String> )lst.getAdapter()).notifyDataSetChanged();}
}
@Override
public void afterTextChanged(Editable s) {
}
});
lst.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
lst.setVisibility(View.GONE);
}
});
ArrayAdapter<String> ad=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,array1);
ad.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
lst.setAdapter(ad);
}}
在这里您可以根据您的设计使用自定义列表视图行。
希望对您有所帮助!!!