package com.****.main.dialogPack;
import android.app.Dialog;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import com.rtk.app.R;
import com.rtk.app.tool.PublicCallBack;
import com.rtk.app.tool.PublicClass;
import com.rtk.app.tool.StaticValue;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseDiaolg extends Dialog implements View.OnClickListener {
private Window window;
private Context context;
private Handler handlerBase=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
try {
switch (msg.what){//這么做的原因是因為部分dialog是在子執行緒里控制顯示或者關閉的,必須用handle eg:qq系結
case 0:
BaseDiaolg.super.show();
break;
case 1:
BaseDiaolg.super.dismiss();
break;
}
}catch (Exception e){}
}
};
public BaseDiaolg(Context context) {
super(context);
this.context=context;
}
public void initView(int layoutId,int location) {
setContentView(layoutId);
windowDeploy(0, 0,location);
//設定觸摸對話框意外的地方取消對話框
setCanceledOnTouchOutside(true);
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
//ButterKnife.bind(this, getWindow().getDecorView());//在子類呼叫InitView后添加這個,可以直接系結View 不用簡歷holder了
}
//設定視窗顯示
private void windowDeploy(float x, float y,int position) {
window = getWindow(); //得到對話框
//window.setWindowAnimations(R.style.dialog_anim_style2); //設定視窗彈出影片
//window.setBackgroundDrawableResource(R.color.halfTransparency); //設定對話框背景為透明
WindowManager.LayoutParams wl = window.getAttributes();
//根據x,y坐標設定視窗需要顯示的位置
wl.x = (int) x; //x小于0左移,大于0右移
wl.y = (int) y; //y小于0上移,大于0下移
//wl.alpha = 0.6f; //設定透明度
wl.gravity = position; //設定重力
wl.width = ViewGroup.LayoutParams.MATCH_PARENT;//設定寬度
wl.height = ViewGroup.LayoutParams.WRAP_CONTENT;
window.setAttributes(wl);
}
public abstract void initEvent();
private ViewGroup groundFloorView;//父類View
private View loadView;//加載視圖
private List<Integer> listLoadGoneId = new ArrayList<>();//用于保存設定加載空視圖的時隱藏控制元件的Id
private ViewGroup noInterNet;//暫無網路
private PublicCallBack loadDataCallBack;//剛打開加載的getData回呼
private ViewGroup srcDissmiss;//資源丟失
private boolean isLoad = false;//如果加載過則為true
/**
* 設定加載視圖
*
* @param parenView 主要容器視圖
* @param noDissMissView 不想隱藏的View若沒有直接傳null
*/
public void setLoadView(View parenView, View noDissMissView) {
removeLoadView();
groundFloorView = (ViewGroup) parenView;
for (int i = 0; i < groundFloorView.getChildCount(); i++) {
if (groundFloorView.getChildAt(i).getId() != noDissMissView.getId()) {
if (groundFloorView.getChildAt(i).getVisibility() == View.VISIBLE) {//
groundFloorView.getChildAt(i).setVisibility(View.GONE);
listLoadGoneId.add(groundFloorView.getChildAt(i).getId());
}
}
}
if(loadView==null)loadView = LayoutInflater.from(context).inflate(R.layout.auto_max_footview_load_layout, null);
loadView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
if(noInterNet==null)noInterNet = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.auto_no_interner_layout, null);
noInterNet.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
if(srcDissmiss==null)srcDissmiss = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.auto_src_dissmiss_layout, null);
srcDissmiss.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
groundFloorView.addView(loadView);
}
//設定加載完畢之后 顯示的之前隱藏的View
public void setLoadDone() {
for (int i = 0; i < groundFloorView.getChildCount(); i++) {
if (listLoadGoneId.contains(groundFloorView.getChildAt(i).getId())) {
listLoadGoneId.remove((Object) groundFloorView.getChildAt(i).getId());
groundFloorView.getChildAt(i).setVisibility(View.VISIBLE);
}
}
removeLoadView();
isLoad=true;
}
//設定無網路視圖 mark為失敗的介面
private void setNoData(PublicCallBack getDataCallBack) {
try {
if(!isLoad) {
this.loadDataCallBack = getDataCallBack;
removeLoadView();
groundFloorView.addView(noInterNet);
noInterNet.getChildAt(2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (loadDataCallBack != null) {
loadDataCallBack.callBack();
}
removeLoadView();
groundFloorView.addView(loadView);
}
});
}}catch (Exception e){}
}
//資源獲取失敗
public void setSrcDissmiss(String failReason,PublicCallBack getDataCallBack){
if(failReason.equals(StaticValue.NoInterNetString)){//如果是網路問題
setNoData(getDataCallBack);
}else
try {
if (!isLoad) {
this.loadDataCallBack = getDataCallBack;
removeLoadView();
groundFloorView.addView(srcDissmiss);
((TextView)srcDissmiss.getChildAt(1)).setText(PublicClass.setRequestFailString(failReason));
srcDissmiss.getChildAt(2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (loadDataCallBack != null) loadDataCallBack.callBack();
removeLoadView();
groundFloorView.addView(loadView);
}
});
}
}catch (Exception e){}
}
//移除插入的加載和斷網視圖
private void removeLoadView(){
if(noInterNet!=null)groundFloorView.removeView(noInterNet);
if(loadView!=null)groundFloorView.removeView(loadView);
if(srcDissmiss!=null)groundFloorView.removeView(srcDissmiss);
}
@Override
public void show() {
//super.show();
handlerBase.sendEmptyMessage(0);
}
@Override
public void dismiss() {
///super.dismiss();
handlerBase.sendEmptyMessage(1);
}
}
不用管我怎么實作,直接繼承即可,呼叫方法如下
package com.***.main.dialogPack;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import com.rtk.app.R;
import com.rtk.app.base.BaseActivity;
import com.rtk.app.tool.PublicCallBack;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* 可以回呼的tipDialog
*/
public class DialogTipsForCallBack extends BaseDiaolg {
@BindView(R.id.dialog_tip_for_callback_layout)
TextView dialogTipForCallbackLayout;
@BindView(R.id.dialog_tip_for_callback_tip)
TextView dialogTipForCallbackTip;
@BindView(R.id.dialog_tip_for_callback_ok)
TextView dialogTipForCallbackOk;
@BindView(R.id.dialog_tip_for_callback_cancle)
TextView dialogTipForCallbackCancle;
private BaseActivity activity;
private String tips;
private PublicCallBack publicCallBack;
public DialogTipsForCallBack(BaseActivity activity, String tips, PublicCallBack publicCallBack) {
super(activity);
this.activity = activity;
this.tips = tips;
this.publicCallBack = publicCallBack;
initView(R.layout.dialog_tip_for_callback, Gravity.CENTER);
ButterKnife.bind(this, getWindow().getDecorView());
dialogTipForCallbackTip.setText(tips);
setCanceledOnTouchOutside(false);
initEvent();
}
@Override
public void initEvent() {
dialogTipForCallbackOk.setOnClickListener(this);
dialogTipForCallbackCancle.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.dialog_tip_for_callback_ok:
publicCallBack.callBack("true");
break;
case R.id.dialog_tip_for_callback_cancle:
publicCallBack.callBack("false");
break;
}
dismiss();
}
}
package com.****;
public interface PublicCallBack {
void callBack(String... str);
}
PublicCallBack 就是自定義回呼,你可以不用,為了方便理解,放了上去
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:background="@drawable/shape_corner_white_2dp"
>
<TextView
android:id="@+id/dialog_tip_for_callback_layout"
android:layout_width="match_parent"
android:layout_height="45dip"
android:background="@color/theme1"
android:gravity="center|left"
android:paddingLeft="10dip"
android:text="提示"
android:textColor="@color/white"
android:textSize="17dip" />
<TextView
android:id="@+id/dialog_tip_for_callback_tip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dip"
android:layout_marginTop="10dip"
android:gravity="center|left"
android:paddingLeft="5dip"
android:paddingRight="5dip"
android:lineSpacingMultiplier="1.5"
android:text="更新內容"
android:textColor="@color/drak444"
android:textSize="15dip" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dip"
android:layout_marginBottom="10dip"
android:orientation="horizontal" >
<TextView
android:id="@+id/dialog_tip_for_callback_ok"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_marginLeft="10dip"
android:layout_weight="1"
android:background="@drawable/shape_corner_theme1_2dp"
android:gravity="center"
android:text="確定"
android:textColor="@color/white"
android:textSize="15dip" />
<TextView
android:id="@+id/dialog_tip_for_callback_cancle"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_marginLeft="20dip"
android:layout_marginRight="10dip"
android:layout_weight="1"
android:background="@drawable/shape_corner_wideline_5dp"
android:gravity="center"
android:text="取消"
android:textColor="@color/drak444"
android:textSize="15dip" />
</LinearLayout>
</LinearLayout>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/291517.html
標籤:其他
下一篇:Android Studio匯入新專案提示No value has been specified for this provider
