Android自动完成的样式
我有一个Android自动完成的样式,android,autocompletetextview,Android,Autocompletetextview,我有一个AutoCompleteTextView,我想对其应用一些样式。代码在功能上是有效的,基本的样式也不错,但还有一些更高级的东西我想更改。具体而言: 自定义字体 我的搜索栏使用我的应用程序的自定义字体,但预测行使用系统的默认字体显示。以下是我如何设置搜索结果的字体: mSearchTextView.setTypeface(font.mAvenirLTStandardLight); 从下拉列表中删除阴影 默认的下拉选项有一个阴影,我的应用程序使用了更平坦的设计。如果可能的话,我想把它去掉
AutoCompleteTextView
,我想对其应用一些样式。代码在功能上是有效的,基本的样式也不错,但还有一些更高级的东西我想更改。具体而言:
自定义字体
我的搜索栏使用我的应用程序的自定义字体,但预测行使用系统的默认字体显示。以下是我如何设置搜索结果的字体:
mSearchTextView.setTypeface(font.mAvenirLTStandardLight);
从下拉列表中删除阴影
默认的下拉选项有一个阴影,我的应用程序使用了更平坦的设计。如果可能的话,我想把它去掉
将半径添加到下拉列表中
我能够将每条结果线的半径四舍五入,但我无法找出如何将曲线应用于整个下拉框
以下是我的适用代码部分:
private void setAutoCompleteListener() {
AutoCompleteAdapter adapter = new AutoCompleteAdapter(mContext,
R.layout.autocomplete_list_item, mLatLng);
mSearchTextView.setAdapter(adapter);
mSearchTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String str = (String) adapterView.getItemAtPosition(i);
initiateSearch();
hideKeyboard();
}
});
}
private void setAutoCompleteListener(){
自动完成适配器=新的自动完成适配器(mContext,
R.layout.autocomplete_list_item,mLatLng);
mSearchTextView.setAdapter(适配器);
mSearchTextView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
String str=(String)adapterView.getItemAtPosition(i);
启动搜索();
隐藏板();
}
});
}
activity_map.xml
<AutoCompleteTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/actvSearch"
android:hint="@string/search_or_enter_address"
android:background="@color/transparent_white"
android:textSize="14sp"
android:textColor="@color/black"
android:layout_centerVertical="true"
android:layout_toEndOf="@id/ibLogoImage"
android:layout_toStartOf="@id/ibSearch"
android:dropDownAnchor="@id/search_bar"
android:dropDownVerticalOffset="0dp" />
自动完成\u列表\u item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:textColor="@color/black"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingStart="25dp"
android:paddingEnd="25dp"/>
AutoCompleteAdapter.java
public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
private static String TAG = "AutoComplete";
/*
* The lat/lng of the current location.
*/
private LatLng mLatLng;
/*
* A list of the autocomplete results.
*/
private ArrayList<String> mResults;
public AutoCompleteAdapter(Context context, int textViewResourceId, LatLng latLng) {
super(context, textViewResourceId);
Log.d(TAG, "Center of Screen: " + latLng.toString());
mLatLng = latLng;
}
@Override
public int getCount() {
return mResults.size();
}
@Override
public String getItem(int index) {
return mResults.get(index);
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Retrieve the AutocompleteHelper results.
mResults = AutoCompleteHelper.getAutoCompletePredictions(
constraint.toString(),
mLatLng);
// Assign the data to the FilterResults
filterResults.values = mResults;
filterResults.count = mResults.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}};
return filter;
}
}
公共类自动完成适配器扩展ArrayAdapter实现可过滤{
私有静态字符串TAG=“自动完成”;
/*
*当前位置的lat/lng。
*/
私人车床;
/*
*自动完成结果的列表。
*/
私有ArrayList mResults;
公共自动完成适配器(上下文上下文、int-textViewResourceId、LatLng-LatLng){
super(上下文,textViewResourceId);
Log.d(标签,“屏幕中心:+latLng.toString());
mLatLng=latLng;
}
@凌驾
public int getCount(){
返回mResults.size();
}
@凌驾
公共字符串getItem(int索引){
返回mResults.get(索引);
}
@凌驾
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
if(约束!=null){
//检索AutocompleteHelper结果。
mResults=AutoCompleteHelper.getAutoCompletePredictions(
constraint.toString(),
mLatLng);
//将数据分配给FilterResults
filterResults.values=mResults;
filterResults.count=mResults.size();
}
返回过滤器结果;
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
if(results!=null&&results.count>0){
notifyDataSetChanged();
}
否则{
notifyDataSetionValidated();
}
}};
回流过滤器;
}
}
事实上,我能把一切都弄清楚:)以下是我使用的相关代码
自定义字体
其中的诀窍是,在我的活动中,我必须将字体设置为mAutoCompleteTextView
和TvAutoCompleteTListItem
删除阴影
我将mAutoCompleteTextView
的背景设置为R.drawable.autocomplete\u下拉菜单。在可绘制的图形中,重要的线条是
<stroke
android:width="0dip"
android:color="@color/cp_green" />
半径
半径在R.drawable.autocomplete_下拉列表中设置如下:
<corners
android:radius="20dip"/>
MapActivity.java
private void setAutoCompleteListener(){
mAutoCompleteTextView.setDropDownBackgroundDrawable(
mContext.getResources().getDrawable(R.drawable.autocomplete_下拉菜单);
mAutoCompleteTextView.setAdapter(
新的自动完成适配器(mContext,R.layout.autocomplete_list_item,mLatLng);
mAutoCompleteTextView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
字符串自动完成文本=(字符串)adapterView.getItemAtPosition(i);
mAutoCompleteTextView.setText(自动完成文本);
启动搜索();
隐藏板();
}
});
mAutoCompleteTextView.addTextChangedListener(新的TextWatcher()文件){
@凌驾
更改前的公共无效(CharSequence CharSequence,int i,int i2,int i3){
}
@凌驾
public void onTextChanged(CharSequence CharSequence,int i,int i2,int i3){
}
@凌驾
public void PostTextChanged(可编辑){
如果(可编辑的.length()>0){
mClearTextIcon.setVisibility(View.VISIBLE);
}否则{
mClearTextIcon.setVisibility(View.INVISIBLE);
}
}
});
}
public void applyFonts(){
Log.d(标记“应用字体”);
applyFont(findviewbyd(R.id.rlMap),mContext);
font=font.getInstance(getApplicationContext());
mAutoCompleteTextView.setTypeface(font.mAvenirLTStandardLight);
LayoutFlater充气器=(LayoutFlater)getBaseContext().getSystemService(Context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.autocomplete\u list\u项,空);
TextView tvAutocompleteListItem=(TextView)view.findViewById(R.id.tvAutocompleteListItem);
设置字体(font.mAvenirLTStandardLight);
}
自动完成
private void setAutoCompleteListener() {
mAutoCompleteTextView.setDropDownBackgroundDrawable(
mContext.getResources().getDrawable(R.drawable.autocomplete_dropdown));
mAutoCompleteTextView.setAdapter(
new AutoCompleteAdapter(mContext, R.layout.autocomplete_list_item, mLatLng));
mAutoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String autoCompleteText = (String) adapterView.getItemAtPosition(i);
mAutoCompleteTextView.setText(autoCompleteText);
initiateSearch();
hideKeyboard();
}
});
mAutoCompleteTextView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
if (editable.length() > 0) {
mClearTextIcon.setVisibility(View.VISIBLE);
} else {
mClearTextIcon.setVisibility(View.INVISIBLE);
}
}
});
}
public void applyFonts() {
Log.d(TAG, "Applying Fonts.");
FontHelper.applyFont(findViewById(R.id.rlMap), mContext);
font = Font.getInstance(getApplicationContext());
mAutoCompleteTextView.setTypeface(font.mAvenirLTStandardLight);
LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.autocomplete_list_item, null);
TextView tvAutocompleteListItem = (TextView) view.findViewById(R.id.tvAutocompleteListItem);
tvAutocompleteListItem.setTypeface(font.mAvenirLTStandardLight);
}
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="@color/white" />
<stroke
android:width="0dip"
android:color="@color/cp_green" />
<corners
android:radius="20dip"/>
<padding
android:left="25dip"
android:top="10dip"
android:right="25dip"
android:bottom="10dip" />
</shape>
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:textColor="@color/gray_text"
android:textSize="14sp"
android:layout_marginStart="25dp"
android:layout_marginEnd="25dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:id="@+id/tvAutocompleteListItem"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/search"
android:id="@+id/search"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingStart="10dp"
android:paddingEnd="10dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@drawable/search_bar"
android:id="@+id/search_bar">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/logo_image"
android:layout_centerVertical="true"
android:layout_marginStart="10dp"
android:layout_marginEnd="0dp"
android:id="@+id/ibLogoImage"
android:contentDescription="@string/logo"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/search_icon"
android:layout_centerVertical="true"
android:layout_marginStart="0dp"
android:layout_marginEnd="15dp"
android:layout_alignParentEnd="true"
android:id="@+id/ibSearch"
android:contentDescription="@string/search_hint"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ibClearText"
android:layout_toStartOf="@id/ibSearch"
android:background="@drawable/clear_text"
android:visibility="invisible"
android:layout_centerVertical="true"
android:layout_marginStart="10dp"
android:layout_marginEnd="20dp"
android:contentDescription="@string/clear" />
<AutoCompleteTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/actvSearch"
android:hint="@string/search_or_enter_address"
android:background="@color/transparent_white"
android:textSize="14sp"
android:textColor="@color/black"
android:completionThreshold="3"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_centerVertical="true"
android:layout_toEndOf="@id/ibLogoImage"
android:layout_toStartOf="@id/ibClearText"
android:dropDownAnchor="@id/search_bar"
android:dropDownVerticalOffset="10dp" />
</RelativeLayout>
</RelativeLayout>