android 如何在AutoCompleteTextView中添加加载指示符

pvabu6sv  于 2023-04-28  发布在  Android
关注(0)|答案(4)|浏览(105)

我想在AutoCompleteTextView中显示加载指示器,同时从Web服务加载数据。最好是在自动完成的右侧显示(例如进度控制中的动画-旋转轮)。如何做到这一点?

rmbxnbpk

rmbxnbpk1#

我想显示AutoCompleteTextView加载指标,同时从Web服务加载数据。
在小部件的右侧放置一个外观不确定的ProgressBar,并像这样扩展AutoCompleTextView类:

public class AutoCompleteLoadding extends AutoCompleteTextView {

    private ProgressBar mLoadingIndicator;

    public void setLoadingIndicator(ProgressBar view) {
        mLoadingIndicator = view;
    }

    @Override
    protected void performFiltering(CharSequence text, int keyCode) {
        // the AutoCompleteTextview is about to start the filtering so show
        // the ProgressPager
        mLoadingIndicator.setVisibility(View.VISIBLE);
        super.performFiltering(text, keyCode);
    }

    @Override
    public void onFilterComplete(int count) {
        // the AutoCompleteTextView has done its job and it's about to show
        // the drop down so close/hide the ProgreeBar
        mLoadingIndicator.setVisibility(View.INVISIBLE);
        super.onFilterComplete(count);
    }

}

使用setLoadingIndicator()方法传递对ProgressBar的引用。这假设您正在(AutoCompleteTextView的)适配器/适配器的过滤器中发出Web服务请求。

bd1hkmkf

bd1hkmkf2#

你想使用进度条而不是微调器。使用图形视图将它们放置在AutoCompleteTextView字段上并设置它们的id。我将我的设置为progressLoading。

<ProgressBar
    android:id="@+id/progressLoading"
    style="?android:attr/progressBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/autoCompleteTextViewId"
    android:layout_alignTop="@+id/autoCompleteTextViewId"
    android:paddingTop="14dip"
    android:paddingRight="10dip" />

然后在您的活动/片段中:

final ProgressBar barProgress = (ProgressBar) findViewById(R.id.progressLoading);
originProgress.setVisibility(View.GONE);

它是自动可见的,所以我们最初将其设置为隐藏。然后我们在AutoCompleteTextView上的addTextChangedListener上将其设置为VISIBLE。然后每当任务完成时,您将其设置回隐藏。

qojgxg4l

qojgxg4l3#

要在AutoCompleteView中添加进度条,您可以轻松执行以下操作:
首先创建一个自定义自动完成类,如下所示:

public class AutoCompleteWithLoading extends AutoCompleteTextView{
    private ProgressBar mLoadingIndicator;

    public AutoCompleteWithLoading(Context context) {
        super(context);
    }

    public AutoCompleteWithLoading(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public AutoCompleteWithLoading(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public AutoCompleteWithLoading(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @TargetApi(Build.VERSION_CODES.N)
    public AutoCompleteWithLoading(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes, Resources.Theme popupTheme) {
        super(context, attrs, defStyleAttr, defStyleRes, popupTheme);
    }

    public void setLoadingIndicator(ProgressBar progressBar) {
        mLoadingIndicator = progressBar;
    }

    public void dispayIndicator(){
        if(mLoadingIndicator != null){
            mLoadingIndicator.setVisibility(View.VISIBLE);
        }
        this.setText("");
    }

    public void removeIndicator(){
        if(mLoadingIndicator != null){
            mLoadingIndicator.setVisibility(View.GONE);
        }
    }
}

然后,将此添加到XML中

<thriviastudios.com.views.view.AutoCompleteWithLoading
                android:padding="10dp"
                android:layout_margin="5dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                style="@style/NotPresentationText"
                android:id="@+id/activity_activities_search_city_text_view"
                android:popupBackground="@color/app_bg"
                android:layout_centerInParent="true"
                android:background="@color/app_bg_darker"
                android:singleLine="true"
                android:hint="City"
                android:imeOptions="actionDone"
                android:textColorHint="@color/white"
                />

                <ProgressBar
                    android:id="@+id/loading_indicator"
                    style="?android:attr/progressBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical|right"
                    android:layout_marginRight="20dp"
                    android:visibility="gone"/>
            </FrameLayout>

注意:使用CustomAutomComplete类的完整路径
然后,在Activity或片段中,您将获得对指示器和自动完成的引用。将进度条附加到自动完成,如下所示:

city.setLoadingIndicator(indicator);

并且您可以在需要时进一步显示或移除指示符,如下所示:

city.dispayIndicator();

city.removeIndicator();

我希望这对某人有帮助。

sqyvllje

sqyvllje4#

在ContraintLayout中 Package 以下元素:

  • 添加AutoCompleteTextView
  • 在约束布局中添加垂直基准线以对齐进度栏。
  • 添加进度条

下面是一个例子:

<androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp">

            <AutoCompleteTextView
                android:id="@+id/searchFormKeyword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:backgroundTint="@color/Assignment9Green"
                android:hint="Enter the Keyword"
                android:inputType="text"
                android:textColor="@color/white"
                android:textColorHint="@color/Assignment9HintGrey"
                android:textSize="20sp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">

            </AutoCompleteTextView>

            <androidx.constraintlayout.widget.Guideline
                android:id="@+id/guideline2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintGuide_percent="0.9"
                app:layout_constraintStart_toStartOf="parent" />

            <ProgressBar
                android:id="@+id/progressBar2"
                style="?android:attr/progressBarStyle"
                android:layout_width="26dp"
                android:layout_height="25dp"
                android:layout_marginTop="10dp"
                android:indeterminateTint="@color/Assignment9Green"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintStart_toEndOf="@id/guideline2"
                app:layout_constraintTop_toTopOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>

它看起来是这样的:

相关问题