Android学习教程之悬浮窗菜单制作(9)

这篇文章主要为大家详细介绍了Android学习教程之悬浮窗菜单制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android悬浮窗菜单的具体代码,供大家参考,具体内容如下

MainActivity.java代码:

 package siso.multilistview; import android.os.Build; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); hideBothNavigationBarAndStatusBar(); setContentView(R.layout.activity_main); FloatMenuManager.getInstance().startFloatView(this.getApplicationContext()); findViewById(R.id.hideStatuBarNaviBar).setOnClickListener(this); } private void hideBothNavigationBarAndStatusBar() { View decorView = getWindow().getDecorView(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); } } @Override protected void onResume() { super.onResume(); hideBothNavigationBarAndStatusBar(); FloatMenuManager.getInstance().showFloatingView(); } @Override protected void onPause() { super.onPause(); FloatMenuManager.getInstance().hideFloatingView(); } @Override protected void onDestroy() { super.onDestroy(); FloatMenuManager.getInstance().destroy(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.hideStatuBarNaviBar: hideBothNavigationBarAndStatusBar(); break; } } } 

Const.java代码:

 package siso.multilistview; public interface Const { String GAME_URL = "http://www.cnblogs.com/cate/html5/"; String HOME = "首页"; String FAVOUR = "收藏"; String FEEDBACK = "客服"; String MESSAGE = "消息"; String CLOSE = "关闭"; String[] MENU_ITEMS = {HOME, FAVOUR, FEEDBACK, MESSAGE, CLOSE}; } 

FloatMenuManager.java代码:

 package siso.multilistview; import android.content.ComponentName; import android.content.Context; import android.os.IBinder; import java.io.ObjectStreamException; public class FloatMenuManager implements ServiceConnectionManager.QdServiceConnection { private ServiceConnectionManager mServiceConnectionManager; private FloatMenuManager() { } //静态内部类实现单例 优于双重检查锁(DCL)单例 public static FloatMenuManager getInstance() { return FloatMenuHolder.single; } /** * 静态内部类能够解决DCL双重检查锁失效的问题 */ private static class FloatMenuHolder { private static final FloatMenuManager single = new FloatMenuManager(); } /** * 防止反序列获取新的单例 * * @return * @throws ObjectStreamException */ private Object readResolve() throws ObjectStreamException { return FloatMenuHolder.single; } private FloatMenuService mFloatViewService; public void startFloatView(Context context) { if (mFloatViewService != null) { mFloatViewService.showFloat(); return; } if (mServiceConnectionManager == null) { mServiceConnectionManager = new ServiceConnectionManager(context, FloatMenuService.class, this); mServiceConnectionManager.bindToService(); } } /** */ public void addFloatMenuItem() { if (mFloatViewService != null) { } } /** * */ public void removeMenuItem() { if (mFloatViewService != null) { } } /** * 显示悬浮图标 */ public void showFloatingView() { if (mFloatViewService != null) { mFloatViewService.showFloat(); } } /** * 隐藏悬浮图标 */ public void hideFloatingView() { if (mFloatViewService != null) { mFloatViewService.hideFloat(); } } /** * 释放QDSDK数据 */ public void destroy() { if (mFloatViewService != null) { mFloatViewService.hideFloat(); mFloatViewService.destroyFloat(); } if (mServiceConnectionManager != null) { mServiceConnectionManager.unbindFromService(); } mFloatViewService = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { mFloatViewService = ((FloatMenuService.FloatMenuServiceBinder) service).getService(); if (mFloatViewService != null) { mFloatViewService.showFloat(); } } @Override public void onServiceDisconnected(ComponentName name) { mFloatViewService = null; } } 

FloatMenuService.java代码:

 package siso.multilistview; import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.view.View; import android.widget.Toast; import com.yw.game.sclib.Sc; import com.yw.game.sclib.ScCreateResultCallback; import java.util.ArrayList; import siso.floatmenu.FloatMenu; import siso.floatmenu.MenuItem; import siso.floatmenu.MenuItemView; public class FloatMenuService extends Service implements View.OnClickListener { private FloatMenu mFloatMenu; private final static String TAG = FloatMenuService.class.getSimpleName(); private Handler mHandler = new Handler(); private int[] menuIcons = new int[]{R.drawable.yw_menu_account, R.drawable.yw_menu_favour, R.drawable.yw_menu_fb, R.drawable.yw_menu_msg, R.drawable.yw_menu_close}; @Override public IBinder onBind(Intent intent) { return new FloatMenuServiceBinder(); } /** * On create. */ @Override public void onCreate() { super.onCreate(); ArrayList mMenuItems = new ArrayList<>(); for (int i = 0; i 

ServiceConnectionManager.java代码:

 package siso.multilistview; import android.app.Service; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.IBinder; public class ServiceConnectionManager implements ServiceConnection { private final Context context; private final Class service; private boolean attemptingToBind = false; private boolean bound = false; private QdServiceConnection mQdServiceConnection; public ServiceConnectionManager(Context context, Class service, QdServiceConnection mQdServiceConnection) { this.context = context; this.service = service; this.mQdServiceConnection = mQdServiceConnection; } public void bindToService() { if (!attemptingToBind) { attemptingToBind = true; context.bindService(new Intent(context, service), this, Context.BIND_AUTO_CREATE); } } @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { attemptingToBind = false; bound = true; mQdServiceConnection.onServiceConnected(componentName, iBinder); } @Override public void onServiceDisconnected(ComponentName componentName) { mQdServiceConnection.onServiceDisconnected(componentName); bound = false; } public void unbindFromService() { attemptingToBind = false; if (bound) { context.unbindService(this); bound = false; } } public interface QdServiceConnection { void onServiceConnected(ComponentName name, IBinder service); void onServiceDisconnected(ComponentName name); } } 

activity_main.xml

   

AndroidManifest.xml

      

Android Library Project(库项目)结构:

项目运行如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持html中文网。

以上就是Android学习教程之悬浮窗菜单制作(9)的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 移动