简体   繁体   English

以编程方式在活动视图顶部添加自定义视图

[英]Add a custom view at the top of views in activity Programatically

I want to add a custom view (that contains a layout with button and text view) to every Activity I need my custom view name is NetworkErrorView and I have another class that help me observe network status change! 我想向每个Activity添加一个自定义视图(包含带有按钮和文本视图的布局),我需要我的自定义视图名称是NetworkErrorView,并且我还有另一个类可以帮助我观察网络​​状态的变化!

I want to show my custom view on top of other view in every activity that I bulid my NetworkErrorView like this 我想在像这样构建NetworkErrorView的每个活动中的其他视图之上显示我的自定义视图

private NetworkErrorView networkErrorView=new NetworkErrorView(this).build();

And when network stats is change I want to change visibility from Gone to Visible(onChange is called when my network status changed): 当网络状态发生变化时,我想将可见性从“消失”更改为“可见”(当网络状态发生变化时会调用onChange):

 @Override
public void onChange(boolean isConnected) {
    networkErrorView.networkErorrDialog(isConnected);
}

My onChange() (method work correctly but i cant see my custom view when I change visibility! Can anyone help me?? 我的onChange() (方法可以正常工作,但是更改可见性时我看不到自定义视图!有人可以帮我吗?

NetworkErrorView : NetworkErrorView

public class NetworkErrorView  {

private ViewGroup mRootView;
private Activity mActivity;
private LinearLayoutManager mLayoutManager;
private View view;
private Animation translationIn;
private Button btnNetwork;
private LinearLayout networkContainer;
private boolean networkStatus;

public NetworkErrorView(@NonNull Activity activity) {
    this.mRootView = (ViewGroup) activity.findViewById(android.R.id.content);
    this.mActivity = activity;
    this.mLayoutManager = new LinearLayoutManager(mActivity);
}

public NetworkErrorView build(){
    view= Assist.inflater.inflate(R.layout.dialog_network_error,mRootView,false);
    //View.inflate(mActivity, R.layout.dialog_network_error, mRootView);
    btnNetwork=(Button) view.findViewById(R.id.btn_error_network);
    btnNetwork.setOnClickListener(onClickListener);
    networkContainer=(LinearLayout) view.findViewById(R.id.layout_error_networkcontainer);
    translationIn= AnimationUtils.loadAnimation(mActivity,R.anim.anim_wifi_container_in);
    mRootView.addView(view, 1);
    return this;
}



public void networkErorrDialog(boolean isConnected){
    networkStatus=isConnected;
    if(isConnected){
        view.setVisibility(View.GONE);
    }else {
       view.setVisibility(View.VISIBLE);
        view.bringToFront();
        translationIn= AnimationUtils.loadAnimation(mActivity, R.anim.anim_wifi_container_in);
        networkContainer.setAnimation(translationIn);
    }
}


View.OnClickListener onClickListener=new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(!networkStatus){
            mActivity.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));

        }
    }
};

} }

mActivity : 活动

public class mActivity extends AppCompatActivity implements NetworkObserver {

private NetworkErrorView networkErrorView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);
    FontManager.instance().setTypeface(getWindow().getDecorView());
    addView();
    NetworkManager.init(this);
//...
}

private void addView(){
   //...
    networkErrorView=new NetworkErrorView(this).build();
}

@Override
public void onChange(boolean isConnected) {
    networkErrorView.networkErorrDialog(isConnected);
}
}

I think the view is being added, but because you are adding the view in the 1th position it is not being shown so try something like this 我认为正在添加视图,但是由于您将视图添加到第1个位置,因此未显示该视图,因此请尝试这样的操作

public NetworkErrorView build(){
    view= Assist.inflater.inflate(R.layout.dialog_network_error,mRootView,false);
    //View.inflate(mActivity, R.layout.dialog_network_error, mRootView);
    btnNetwork=(Button) view.findViewById(R.id.btn_error_network);
    btnNetwork.setOnClickListener(onClickListener);
    networkContainer=(LinearLayout) view.findViewById(R.id.layout_error_networkcontainer);
    translationIn= AnimationUtils.loadAnimation(mActivity,R.anim.anim_wifi_container_in);
    mRootView.addView(view, 0); //Change this form 1 to 0
    return this;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM