我通过网络服务进行后台工作时使用this library进度指示器。我希望在进度条显示时使背景透明。是否有任何方法可以使窗口以编程方式透明,就像使用进度对话框一样?
public class MainActivity extends AppCompatActivity{
private EditText email, pass;
private SessionManager session;
private SQLiteHandler db;
private AVLoadingIndicatorView pb;
private static final String LOGIN = "http://ubooktoday.com/android/login";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
email = (EditText)findViewById(R.id.et1);
pass = (EditText)findViewById(R.id.et2);
session = new SessionManager(getApplicationContext());
db = new SQLiteHandler(getApplicationContext());
pb = new AVLoadingIndicatorView(this);
if (session.isLoggedIn()) {
startActivity(new Intent(MainActivity.this, ListVActivity.class));
finish();
}
}
public void login(View view){
if (!email.getText().toString().equals("") && !pass.getText().toString().equals("")) {
loginRequest();
}else{
Toast.makeText(getApplicationContext(), "Please enter the details", Toast.LENGTH_SHORT).show();
}
}
private void loginRequest() {
startAnim();
StringRequest stringRequest = new StringRequest(Request.Method.POST, LOGIN,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
stopAnim();
try {
JSONObject jObj = new JSONObject(response);
String status = jObj.getString("status");
// Now check status value
if (status.equals("0")) {
Toast.makeText(getApplicationContext(), jObj.getString("message"), Toast.LENGTH_LONG).show();
} else if (status.equals("1")) {
session.setLogin(true);
db.addUser(jObj.getString("spa_name"), jObj.getString("user_id"));
startActivity(new Intent(MainActivity.this, ListVActivity.class));
finish();
}
} catch (JSONException e) {
// JSON error
e.printStackTrace();
Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("email", email.getText().toString());
params.put("pass", pass.getText().toString());
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
requestQueue.add(stringRequest);
}
public void startAnim(){
findViewById(R.id.avloadingIndicatorView).setVisibility(View.VISIBLE);
}
public void stopAnim(){
findViewById(R.id.avloadingIndicatorView).setVisibility(View.GONE);
}
}
&#13;
答案 0 :(得分:4)
试试这个。创建自定义对话框类
namedtuple
对应的XML custom_progress_layout.xml
public class CShowProgress {
public static CShowProgress mCShowProgress;
public Dialog mDialog;
public CShowProgress() {
}
public static CShowProgress getInstance() {
if (mCShowProgress== null) {
mCShowProgress= new CShowProgress();
}
return mCShowProgress;
}
public void showProgress(Context mContext) {
mDialog= new Dialog(mContext);
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setContentView(R.layout.custom_progress_layout);
mDialog.findViewById(R.id.progress_bar).setVisibility(View.VISIBLE);
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
mDialog.setCancelable(true);
mDialog.setCanceledOnTouchOutside(true);
mDialog.show();
}
public void hideProgress() {
if (mDialog!= null) {
mDialog.dismiss();
mDialog= null;
}
}
}
活动
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@android:color/transparent"
android:orientation="vertical">
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/progress_bar"
app:indicator="SemiCircleSpin"
app:indicator_color="@android:color/black"
android:layout_width="50dp"
android:layout_height="50dp"
android:visibility="visible" />
</RelativeLayout>
并通过调用隐藏
CShowProgress cShowProgress = CShowProgress.getInstance();
cShowProgress.showProgress(Activity.this);
希望这会有所帮助。
答案 1 :(得分:0)
尝试这种方式:
ProgressDialog pd = new ProgressDialog(Login.this,R.style.MyProgressTheme);
pd.setCancelable(false);
pd.setProgressStyle(android.R.style.Widget_ProgressBar_Small);
pd.show();
在values \ styles.xml
中创建主题<style name="MyProgressTheme" parent="android:Theme.Holo.Dialog">
<item name="android:alertDialogStyle">@style/MyDialogStyle</item>
<item name="android:windowBackground">@color/transparent</item>
<item name="android:textColorPrimary">#FFFFFF</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:textStyle">normal</item>
<item name="android:textSize">12sp</item>
</style>
并在values \ styles.xml
中添加主题<style name="MyDialogStyle">
<item name="android:bottomBright">@color/transparent</item>
<item name="android:bottomDark">@color/transparent</item>
<item name="android:bottomMedium">@color/transparent</item>
<item name="android:centerBright">@color/transparent</item>
<item name="android:centerDark">@color/transparent</item>
<item name="android:centerMedium">@color/transparent</item>
<item name="android:fullBright">@color/transparent</item>
<item name="android:fullDark">@color/transparent</item>
<item name="android:topBright">@color/transparent</item>
<item name="android:topDark">@color/transparent</item>
</style>
并添加values \ colors.xml
<color name="transparent">#00000000</color>
编辑1
<com.wang.avi.AVLoadingIndicatorView
android:id="@+id/avloadingIndicatorView"
android:layout_width="wrap_content" //or your custom size
android:layout_height="wrap_content" //or your custom size
android:visibility="visible" //visible or gone
app:indicator="BallPulse"
app:indicator_color="your color"
android:background="@android:color/transparent"
/>
这可能对你有所帮助。