我想创建一个进度条,可以在我的应用程序中的多个活动中使用。进度条包含一些逻辑,例如何时重置,进度条增加的速度等。创建一个可以被多个活动使用的组件
而不是在每个活动中创建和编码逻辑以实现进度条,我希望在单独的类中创建它但我不确定如何做到这一点。我遇到了包含标签,它允许您重新使用布局,但我不确定如何实施进度栏附带的逻辑。有没有人有任何建议/建议最好的方法来解决这个问题?
我想创建一个进度条,可以在我的应用程序中的多个活动中使用。进度条包含一些逻辑,例如何时重置,进度条增加的速度等。创建一个可以被多个活动使用的组件
而不是在每个活动中创建和编码逻辑以实现进度条,我希望在单独的类中创建它但我不确定如何做到这一点。我遇到了包含标签,它允许您重新使用布局,但我不确定如何实施进度栏附带的逻辑。有没有人有任何建议/建议最好的方法来解决这个问题?
正如我在评论中写道,你可以定义一个自定义的活动与显示/隐藏进度条的方法,然后让所有其他活动扩展它。
我提供你一个例子使用自定义ProgressDialog:
public class BaseActivity extends AppCompatActivity {
private MyProgressDialog mLoader;
protected void showLoader() {
if (mLoader == null) {
mLoader = new MyProgressDialog(this);
}
if (!mLoader.isShowing()) {
mLoader.show();
}
}
protected void hideLoader() {
if (mLoader != null && mLoader.isShowing()) {
mLoader.dismiss();
}
}
}
public class MyActivity extends BaseActivity {
// here you can use showLoader and hideLoader wherever you need
}
当然你可以使用任何你想要的,而不是标准ProgressDialog中。例如,您可以定义一个自定义视图。重要的是,无论您将如何在BaseActivity中实现加载器,修改都将适用于您的所有活动。
这里是一个简单的自定义布局进度对话框的例子。
public class MyProgressDialog extends ProgressDialog {
public MyProgressDialog(Context context) {
super(context, R.style.AppTheme_Translucent);
}
public MyProgressDialog(Context context, int theme) {
super(context, theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_progress);
setCancelable(false);
}
@Override
public void setCancelable(boolean flag) {
super.setCancelable(flag);
}
}
这dialog_progress.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:keepScreenOn="true" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/bg_progress_dialog" >
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="12dp"
android:indeterminateTint="#00acff"
android:indeterminateTintMode="src_in" />
</RelativeLayout>
</RelativeLayout>
这bg_progress_dialog.xml
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@android:color/black" />
<corners android:radius="10dp" />
</shape>
这是作风摆在styles.xml
:
<style name="AppTheme.Translucent">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
感谢您的回答,我明白您在此处所做的关于如何实施逻辑。有一件事我仍然不确定 - XML布局。如果我想创建一个进度条,我可以在很多活动中使用,那么我必须具有一个我必须使用的常见视图 - 因为必须在扩展包含进度条的视图之前对其执行其他组件?这对我来说都是新的,请原谅我缺乏知识。 –
@Perfect_Comment当然,这取决于你想实现的自定义组件类型。一般你需要做的是扩展一个已经存在的类(哪一个取决于你的需求)。例如,您可以创建一个扩展“FrameLayout”的类并将您想要的布局充填到其中。在进度指示器的情况下,可能会更好地扩展'ProgressDialog'类或甚至通用的'DialogFragment'。 – thetonrifles
@Perfect_Comment我已经添加了一个扩展'ProgressDialog'的样本加载器的代码。 – thetonrifles
您可以创建成一个习俗基本活动,并让所有活动扩展它。 AppCompatActivity < - MyBaseActivity < - 所有其他活动 – thetonrifles