我正在使用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);
}
}
最佳答案
试试这个。制作自定义对话框类
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;
}
}
}
对应的XMLcustom_progress_layout.xml
<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>
和 Activity
CShowProgress cShowProgress = CShowProgress.getInstance();
cShowProgress.showProgress(Activity.this);
并通过调用隐藏
cShowProgress.hideProgress();
希望这会有所帮助。
关于android - 使进度条背景透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38009102/