在android 软件第一次使用的时候,一般会在当前的界面上做一个灰色的蒙版,上面有显示的一些提醒性质的教学文字或者图案。
我想的是当前界面上蒙上一个 Fragment 把提示信息也放在Fragment上。
这是效果图。后面附上demo源码。
具体就是在activity成功启动之后。画出activity的view之后。这个不能在生命周期进行判断。我尝试的是用Handler去不断postDelay查看view是否被画出。即view的width > 0.
然后用代码动态的把这个蒙版Fragment加入到当前的Activity之中。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rootView = findViewById(R.id.root); final Handler mHandler = new Handler(); //不断延时 看view是否被加载出来。 mHandler.postDelayed(new Runnable() { @Override public void run() { if(rootView.getWidth() > 0){ //把蒙版加载到当前的页面上 detailsAssertFragment = new MyJobDetailsAssertFragment(); getFragmentManager().beginTransaction() .add(R.id.root, detailsAssertFragment) .commit(); }else { mHandler.postDelayed(this, 100); } } },300); }
注意的是R.id.root不是 detailAssertFragment的Id。这个函数的意思是把蒙版detailAssertFragment 加入到id是R.id.root的ViewGroup中。
我发现如果id为R.id.root的view 如果不是FrameLayout就无法添加蒙版成功。
看看蒙版Fragment的代码
public class MyJobDetailsAssertFragment extends Fragment{ public void MyJobDetailsAssertFragment(){ } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.my_jobs_details_assert, null); //根据需求设定蒙版遮盖的位置。(这没有遮盖Actionbar,根据要求自行调整) LayoutParams params= new LayoutParams(rootView.getWidth(),rootView.getHeight()); view.setLayoutParams(params); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //蒙版点击一下之后消失的处理 getFragmentManager().beginTransaction() .remove(detailsAssertFragment) .commit(); showAssert = false; } }); showAssert = true; return view; } }
实现的蒙版就已经是半透明的。不用再去设置他的透明度。蒙版的样式就在DetailAssertFragment加载的XML自己设置摆放图案。
Demo源码:http://download.csdn.net/detail/u012565107/7271675
时间: 2024-10-10 02:04:50