我有一个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();
        }
    });
}

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" />

autocomplete_list_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;
    }
}

#1楼 票数:4 已采纳

我能够实际解决所有问题:)以下是我使用的相关代码。

自定义字体

这个的诀窍是我必须在我的Activity中将我的字体设置为mAutoCompleteTextViewtvAutocompleteListItem

删除阴影

我将mAutoCompleteTextView的背景设置为R.drawable.autocomplete_dropdown。 在那个drawable中,重要的是

<stroke
    android:width="0dip"
    android:color="@color/cp_green" />

半径

半径在R.drawable.autocomplete_dropdown中设置如下:

    <corners
        android:radius="20dip"/>

MapActivity.java

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);
}

autocomplete_dropdown.xml

<?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>

autocomplete_list_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/gray_text"
    android:textSize="14sp"
    android:layout_marginStart="25dp"
    android:layout_marginEnd="25dp"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"
    android:id="@+id/tvAutocompleteListItem"/>

activity_map.xml

<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>

  ask by Sheridan Gray translate from so

未解决问题?本站智能推荐:

1回复

具有自动完成样式的AndroidSearchview

在Android中,从Uber应用程序获取具有此示例样式的自动搜索结果的搜索视图的最佳方法是什么? 我特别喜欢结果如何直接显示在屏幕上而不是下拉菜单。 我在想可能要获取搜索查询并将结果动态地添加为按钮,但必须有一种简单的方法来实现它们在此处具有的样式和功能。 开放任何建议。
1回复

ANDROID自动完成查看建议

我想将建议不仅显示为起始字符,而且显示为包含字符...意味着 's' 建议应该像tags , pas , also ,等等。
2回复

Android自动完成Textview过滤

我有一个AutoCompleteTextview,但是默认过滤对我不利。 例如:字符串“ hum”应该与Hohum Plumbing, Humphrey Bogart, and Robert Mitchum匹配,但是目前还没有。 目前,我正在传递ArrayList并创建适配器。 现在如
1回复

使用JSON自动完成Android

我正在制作一个Android应用程序。 自动完成功能存在问题。 当我将自动完成功能与这样的变量连接时,自动完成功能有效 但我也想将其连接到生成JSON的网页,我试图将其与网页连接,但无法正常工作。 我只想将我的自动完成功能与网页连接起来,并在搜索时检索名称字符串。 我还向我的And
2回复

自动完成/自动填充编辑文本Android

我正在寻求实现AutocompleteTextView的功能,但略有不同。 我希望得到一个完整的句子,而不是获得带有建议的下拉列表。 例如:我输入abc并完成,其余文本为灰色: abc1@etc.etc ,然后单击按钮以保留此文本或继续书写以进一步过滤。 您认为以某种方式可以实现吗?
2回复

Android:实现自动完成textview的意图

我是新来的,正在尝试更多地了解意图。 我偶然发现了autocompletetextview 。 如何实现意图,以便将不同的建议应用于不同的活动。 例如,当我单击第一条建议时,它将移至第一页,而当单击第二条建议时,将显示第二页。 MainActivity.java strings.x
1回复

使用改造的Android自动完成视图

我试图了解如何使用芯片实现搜索(因此应该有机会添加多个值),建议列表应来自使用Retrofit的Web服务。 我希望实现的一个例子是在Pinterest应用程序中搜索。 我在网上阅读了很多帖子,其中有人使用AutoCompleteTextView和其他SearchView,说实话,我对于采
1回复

在Android中使用Material自动完成提示

我在material-text-field 中阅读了 doc,editText 上有 auto-complete-textView 作为提示而不是下拉列表。 你可以看到下面的图片。 但我做不到。 我尝试使用 textinputlayout 和 material-auto-complete-text