Android活动指示器?
Posted
技术标签:
【中文标题】Android活动指示器?【英文标题】:Android Activity Indicator? 【发布时间】:2011-06-28 21:07:13 【问题描述】:如何在 android 中显示活动指示器?是否有任何 Android 库给定的方法?如果不是,请告诉我在 Android 中用于显示活动指示器的技术?
【问题讨论】:
你的意思是像在 ProgressDialog (developer.android.com/guide/topics/ui/…) 中使用的独立无限进度指示器之类的东西 “活动指示器”与 Android 中的“活动”类和概念非常混淆......没有想到这可能是进度对话框/栏:-) 但是有一个Android 中的一些东西,我不知道正确的名称,因此无法很好地用谷歌搜索它 【参考方案1】:Android 中与 ios 活动指示器最直接等效的是 ProgressBar
,但设置为不确定。因此,您可以将视图拖放到布局中,它会为您提供旋转动画。
<ProgressBar
android:layout_
android:layout_
android:id="@+id/ctrlActivityIndicator"
android:indeterminateOnly="true"
android:keepScreenOn="true"
/>
您可以使用它向用户指示一些后台活动。
【讨论】:
如何改变圆形条的颜色? 要更改颜色可能最容易使用 Olegas 答案,然后您可以指定自己喜欢的任何颜色的可绘制对象。否则,您可能需要复制 ProgressBar 的 SDK 源代码并为其提供您自己的可绘制对象。【参考方案2】:做这样的事
ProgressDialog mDialog = new ProgressDialog(getApplicationContext());
mDialog.setMessage("Please wait...");
mDialog.setCancelable(false);
mDialog.show();
【讨论】:
如果您最终得到WindowManager$BadTokenException
,请参阅***.com/q/1561803/650233
如果你想让对话框看起来像一个旋转图标而不是一个进度条,你可以使用 setProgressStyle(STYLE_SPINNER)。等效于警报中的 iOS ActivityIndicator
那个代码给了我很长的错误(和崩溃),其中一部分是Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
。所以我使用了以下而不是答案:ProgressDialog mDialog = ProgressDialog.show(this, "dialog title", "dialog message", true);
如果从活动中运行,您可以通过替换 ProgressDialog mDialog = new ProgressDialog(getApplicationContext()); 来修复错误的令牌异常。与 ProgressDialog mDialog = new ProgressDialog(this);
ProgressDialog 现在被标记为过时,我不建议使用。【参考方案3】:
在不使用模式 ProgressDialog 的情况下,还有另外两种显示活动指示器的方法。
您可以在布局中使用 ImageView 并对其应用动画。 Refer developer's site.
public void startAnimation()
// Create an animation
RotateAnimation rotation = new RotateAnimation(
0f,
360f,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);
rotation.setDuration(1200);
rotation.setInterpolator(new LinearInterpolator());
rotation.setRepeatMode(Animation.RESTART);
rotation.setRepeatCount(Animation.INFINITE);
// and apply it to your imageview
findViewById(R.id.myActivityIndicator).startAnimation(rotation);
或者你可以使用xml-drawable来描述一个背景图片,它会有一些旋转动画:
首先描述一个drawable(即/res/drawable/my-indicator.xml)
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_black_76"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />
然后将其设置为某个视图的背景
【讨论】:
如何停止动画??【参考方案4】:public class Mp3cutterActivity extends Activity
MP3Class mp3obj = null;
TextView tv;
MP3Class mp3classobj = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
Context thiscontext = this.getApplicationContext();
mp3classobj = new MP3Class(thiscontext);
setContentView(R.layout.main);
Button btn = (Button)findViewById(R.id.startbutton);
tv = (TextView)findViewById(R.id.textview1);
btn.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
//show a wait indicator as well as the function that calls walkSdcard
try
new SearchSdCard(Mp3cutterActivity.this).execute();
// copyProtector.doCopyProtection();
catch (Exception e)
System.out.println("in search SD card " + e.getMessage());
private void domp3stuff()
// TODO Auto-generated method stub
);
class SearchSdCard extends AsyncTask<String, Void, Boolean>
Context context;
public ProgressDialog dialog;
public SearchSdCard(Activity activity)
this.context = activity;
protected void onPreExecute()
dialog = new ProgressDialog(context);
dialog.setMessage("wait for a moment...");
dialog.show();
@Override
protected Boolean doInBackground(String... params)
// TODO Auto-generated method stub
boolean retval = true;
mp3classobj.searchSdCard();
return retval;
@Override
protected void onPostExecute(Boolean result)
// TODO Auto-generated method stub
if (dialog.isShowing())
dialog.dismiss();
tv.setText("mp3 cutter is an app which cuts down a chunk of memory \nfrom your sdcard by \ndeleting the .mp3 files and more \nyou were made a BAKRA :-)");
if(!result)
tv.setText("error occured !!");
//refer below comment for the MP3class.java file details
【讨论】:
公共类 MP3Class 私有上下文 mcontext;公共 MP3Class(上下文上下文) mcontext = 上下文; 公共无效 searchSdCard() 字符串状态 = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) // 我的函数在这里你可以添加你的 【参考方案5】:活动指示器只是被称为进度对话框。您可以通过编程方式创建。教程数量可用,搜索如何创建进度对话框/ProgressBar
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMax(100);
progressDialog.setMessage("Its loading....");
progressDialog.setTitle("ProgressDialog bar example");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
or
progressDialog.setProgressStyle(ProgressDialog.STYLE_CIRCULAR);
或者您可以使用 xml 创建它,设置可见性 visible 一旦任务完成设置 可见性消失
<ProgressBar
android:id="@+id/loading_spinner"
android:layout_
android:layout_
android:layout_marginTop="100dp"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@color/grey"
android:layout_gravity="center" />
【讨论】:
以上是关于Android活动指示器?的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色