Показать диалог прогресса, прикрепленный к текстовому просмотру - PullRequest
1 голос
/ 19 июля 2011

Мне нужно показать круг Progress, прикрепленный к TextView, но он должен быть таким, чтобы пользователь не сопротивлялся нажатию на другие компоненты экрана. как то так

enter image description here

Любая подсказка?

Ответы [ 5 ]

5 голосов
/ 19 июля 2011

Оберните текстовое представление и виджет индикатора выполнения в соответствующий макет. Подробнее о ProgressBar здесь: http://developer.android.com/reference/android/widget/ProgressBar.html

1 голос
/ 14 октября 2015

Я сделал что-то вроде этого, но он также включает в себя значок.Вот готовый запеченный код для тех, кто ищет это.

В вашем макете используйте

<LinearLayout
    android:id="@+id/my_element"
    android:layout_width="match_parent"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="5dp"
    android:layout_height="20dp">

    <ImageView
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:src="@drawable/ic_action_place"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="20dp"
        android:textColor="@color/black"
        android:textSize="12sp"
        android:gravity="center_vertical"
        android:text=""/>

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="20dp"
        style="@android:style/Widget.ProgressBar.Small"
        android:layout_marginRight="5dp" />

</LinearLayout>

Это линейный макет, который содержит текстовое представление (дополнительный значок впереди только для ударов)и вращающийся индикатор прогресса небольшого размера.

В упражнении / фрагменте добавьте

LinearLayout llMyElement;

В соответствующий onCreate / onCreateView используйте

llMyElement = (LinearLayout) view.findViewById(R.id.my_element);

В OnPostExecute AsyncTask иливезде, где вы хотите установить текст после вызова процесса setLoadingText(llMyElement, “Some Result");

и включить эту вспомогательную функцию, которая устанавливает текст в ваш класс Activity или в любое другое подходящее место, например, в класс Util.

public void setLoadingText(LinearLayout layout, String text)
{
    int count = layout.getChildCount();
    for(int  i = 0; i < count; i++)
    {
        if(layout.getChildAt(i) instanceof TextView)
            ((TextView) layout.getChildAt(i)).setText(text);
        if(layout.getChildAt(i) instanceof ProgressBar)
            layout.getChildAt(i).setVisibility(View.GONE);
    }
}

И это все .. Наслаждайтесь !!

0 голосов
/ 04 ноября 2016

Поместите их внутрь FrameLayout:

<FrameLayout
    android:layout_width="0dp"
    android:layout_height="100dp"
    android:layout_weight="1">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/my_info_card"
        android:gravity="center"
        android:layout_gravity="center"/>
    <ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Small"
        android:layout_gravity="center"/>
</FrameLayout>

Таким образом ProgressBar появится над TextViewКонечно, вы можете скрыть ProgressBar, когда захотите, setVisibility().Вы также можете установить гравитацию каждого макета с помощью android:layout_gravity.В приведенном выше примере это выглядит так:

ProgressBar over TextView

0 голосов
/ 19 апреля 2012

enter image description here установить внешний макет как Framelayout, внутри TextView / EditText и ProgressBar установить (layout gravity "Right")

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/TextView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="24dp"
        android:text="Getting Location"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textSize="12dp" >

        <requestFocus />
    </TextView>

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

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp" >

    <EditText
        android:id="@+id/EditText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingRight="24dp"
        android:text="http://example.com"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textSize="12dp" />

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|center_vertical"
        android:layout_marginRight="4dp" />
</FrameLayout>
0 голосов
/ 19 июля 2011

Такая вещь невозможна только с TextView IMO. Я думаю, что лучший способ имитировать такой эффект - иметь LinearLayout с Textview и Imageview (горизонтальная ориентация). Имейте изображение, невидимое первоначально. Переключить видимость изображения условно. То есть, когда действие начинается, установите видимость, а когда действие закончится, спрячьте его снова. Надеюсь, вы поняли идею.

...