您的位置:首页 > 移动开发 > Android开发

onAttachedToWindow()与onWindowFocusChanged()使用

2017-12-29 16:32 344 查看
在学习recyclerview的时候看到onWindowFocusChanged()的方法,平时没有怎么用,然后百度一下看看怎么用,结果看到onAttachedToWindow()方法,又继续查阅看了一些源码,对于我这种小白来说,看源码还是有点头晕的,为了以防忘记,还是记录一下:

先看onAttachedToWindow();

看了一下:http://blog.csdn.net/guxiao1201/article/details/41517871

这篇写的详细了,看了就懂80%

package com.boerc.view;

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
* @author Administrator
*/
public class MainActivity extends AppCompatActivity {

private String Tag = "MainActivity";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
Log.e(Tag, "onCreate");
}

public void init() {
Button nextBtn = (Button) findViewById(R.id.text);
nextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, Main2Activity.class);
startActivity(intent);
}
});
Button nextBackBtn = (Button) findViewById(R.id.text1);
nextBackBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, Main2Activity.class);
startActivityForResult(intent, 10);
}
});

Button dialogBtn = (Button) findViewById(R.id.text2);
dialogBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("确认")
.setMessage("确定吗?")
.setPositiveButton("是", null)
.setNegativeButton("否", null)
.show();
}
});
}

@Override
protected void onRestart() {
super.onRestart();
Log.e(Tag, "onReStart");
}

@Override
protected void onStart() {
super.onStart();
Log.e(Tag, "onStart");
}

@Override
protected void onResume() {
super.onResume();
Log.e(Tag, "onResume");
}

@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
Log.e(Tag, "onAttachedToWindow");
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
Log.e(Tag, "onWindowFocusChanged:" + "true");
} else {
Log.e(Tag, "onWindowFocusChanged:" + "false");
}
}

@Override
protected void onPause() {
super.onPause();
Log.e(Tag, "onPause");
}

@Override
protected void onStop() {
super.onStop();
Log.e(Tag, "onStop");
}

@Override
protected void onDestroy() {
super.onDestroy();
Log.e(Tag, "onDestroy");
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e(Tag, "onActivityResult");
}
}
把每个生命周期都打印一下:



一进来就执行了这些方法

写app的时候经常会测量宽高

View view = getWindow().getDecorView();
WindowManager.LayoutParams lp = (WindowManager.LayoutParams)view.getLayoutParams();
lp.gravity = Gravity.CENTER;
lp.width = (dm.widthPixels * 4) / 5;
lp.height = (dm.widthPixels * 4) / 5; 为啥在oncreate会获取不到数据呢,,,

看看那个连接就会明白这里不多解释
做了很多的操作,但是就只有第一次进入的时候看到过的时候,再也没有执行过了,由此可知,onAttachedToWindow()只执行一次,什么时候调用得看自己的情景了。

onWindowFocusChanged()

这个onWindowFocusChanged指的是这个Activity得到或者失去焦点的时候 就会call。。
也就是说 如果你想要做一个Activity一加载完毕,就触发什么的话 完全可以用这个



当点击AlertDialog的时候就是如上图的弹出的时候就是false 消失的时候就是true  

同样跳转的时候activity失去焦点为false,当返回的时候为true。

看了大致能明白了一些,还是得自己去尝试才能豁然开朗。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 界面