#android #android-progressbar
#Android #android-progressbar
Вопрос:
Я ожидал, что мой индикатор выполнения работает следующим образом:
без изменения дизайна интерфейса.
Мой макет похож:
после отображения индикатора выполнения он становится:
как вы можете видеть, он переместил edittext и некоторый другой дизайн ниже.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".Login">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="24dp"
android:paddingTop="56dp"
android:paddingRight="24dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="72dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="24dp"
android:src="@drawable/cenviro" />
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@ id/input_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:hint="Email"
android:inputType="textEmailAddress"
app:met_floatingLabel="highlight" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="16dp"
android:visibility="gone"
android:id="@ id/relativeLayout">
<ProgressBar
android:id="@ id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/progress"
android:max="100"/>
<TextView
android:id="@ id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Logging in..."
android:textSize="20sp"
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@ id/progressBar"/>
</RelativeLayout>
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@ id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:hint="Password"
android:inputType="textPassword"
app:met_floatingLabel="highlight" />
как я могу отобразить индикатор выполнения без изменения интерфейса, как на первой картинке, которую я показал?
Комментарии:
1. Нет необходимости включать индикатор выполнения в макет
2. Изображение, которое вы показали в первом, может быть реализовано без отображения его в Xml.
3. @g.brahmaDatta если в макете нет индикатора выполнения, то что он будет показывать?
4. Это потому, что вы используете относительный макет. Используйте FrameLayout instade
5. @g.brahmaDatta первое изображение — это диалоговое окно выполнения, но то, что я хочу, это индикатор выполнения
Ответ №1:
Добавьте этот макет под кнопкой входа в систему и удалите оттуда макет индикатора выполнения.
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
android:visibility="gone"
android:id="@ id/relativeLayout">
<ProgressBar
android:id="@ id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_centerInParent="true"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/progress"
android:max="100"/>
<TextView
android:id="@ id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Logging in..."
android:textSize="20sp"
android:layout_centerInParent="true"
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@ id/progressBar"/>
</RelativeLayout>
Комментарии:
1. это именно то, что я хотел, просто добавьте android:layout_centerInParent =»true», и это будет идеально. Спасибо
2. Добро пожаловать, приятель ..!!
Ответ №2:
удалите progressbar из вашего xml-файла, затем используйте progressdialog в вашем java-файле, например
при запуске задачи
private ProgressDialog dialog;
dialog = new ProgressDialog(activity);
dialog.setMessage("Doing something, please wait.");
dialog.show();
когда это закончится
if (dialog.isShowing()) {
dialog.dismiss();
}
Комментарии:
1. ProgressDialog устарел из SDK 26, мне нужно использовать диалоговое окно прогресса
2. затем вы можете использовать framelayout и выровнять макет progressbar по центру
Ответ №3:
Прежде всего, почему ваш родительский макет является RelativeLayout, а затем все содержимое находится внутри LinearLayout?
Тогда в линейном описании два представления не могут перекрываться, поэтому вы должны установить ProgressBar RelativeLayout вне LinearLayout.
Попробуйте изменить свой макет таким образом:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Login">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="16dp"
android:visibility="gone"
android:id="@ id/relativeLayout">
<ProgressBar
android:id="@ id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/progress"
android:max="100"/>
<TextView
android:id="@ id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Logging in..."
android:textSize="20sp"
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@ id/progressBar"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="24dp"
android:paddingTop="56dp"
android:paddingRight="24dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="72dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="24dp"
android:src="@drawable/cenviro" />
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@ id/input_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:hint="Email"
android:inputType="textEmailAddress"
app:met_floatingLabel="highlight" />
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@ id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:hint="Password"
android:inputType="textPassword"
app:met_floatingLabel="highlight" />
Тогда вы использовали android:centerInParent = "true"
, который не имеет никакого эффекта внутри LinearLayout.
Ответ №4:
Вы используете свой индикатор выполнения в центре электронной почты и пароля, и именно по этой причине, когда ваш индикатор выполнения становится видимым, pt перемещает ваш просмотр пароля ниже просмотра пароля
Вы можете использовать индикатор выполнения по умолчанию, подобный этому (согласно вашему изображению исключения)
ProgressDialog progressDialog = new ProgressDialog(activityCon);
progressDialog.setMessage("Logging In...");
progressDialog.setCancelable(false);
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
Чтобы скрыть
если (ProgressDialog!= null)
ProgressDialog.dismiss();
Надеюсь, это решит вашу проблему 🙂