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

Posted

技术标签:

【中文标题】以编程方式在活动视图顶部添加自定义视图【英文标题】:Add a custom view at the top of views in activity Programatically 【发布时间】:2016-07-11 02:24:13 【问题描述】:

我想为我需要的每个 Activity 添加一个自定义视图(包含按钮和文本视图的布局)我的自定义视图名称是 NetworkErrorView,我还有另一个类可以帮助我观察网络​​状态的变化!

我想在像这样构建 NetworkErrorView 的每个活动中将我的自定义视图显示在其他视图之上

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

当网络统计信息发生变化时,我想将可见性从 Gone 更改为 Visible(当我的网络状态更改时调用 onChange):

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

我的onChange()(方法正常工作,但是当我更改可见性时我看不到我的自定义视图!谁能帮助我??

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);


【问题讨论】:

【参考方案1】:

我认为正在添加视图,但是由于您将视图添加到第 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;

【讨论】:

我试过 0,1,getChiledCount() 和 getChiledCount()-1 但不起作用 你里面的onChange方法记录((ViewGroup)findViewById(android.R.id.content)).getChildCount()的结果 getChildCount() 的结果是 2

以上是关于以编程方式在活动视图顶部添加自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式使用自动布局添加自定义视图

如何以编程方式在 UITableViewCell 中添加自定义视图?

如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT

以编程方式添加控制器视图时自定义自动布局约束被破坏

如何在自定义单元格中点击以编程方式添加的 UiImageViews 推送新视图

以编程方式将一堆自定义视图从 XIB 添加到 UIStackView