Android自定义软键盘输入法,隐藏系统输入法显示光标的实现
2015-09-23 20:05
621 查看
android实现自定义软键盘,先上图看效果,效果基本上是仿ios输入法实现的
这里是实现隐藏系统输入法,同时让EditText能获取光标的代码部分(通过反射调用):
先看XML文件: 这里使用到了ViewStub,为了不用一次性加载 过多的布局文件资源.ViewStub能更省内存!!
接着是单个键盘的的XML布局,展示一个比较多键盘的就好了.其他的都很容易实现了
这里是实现隐藏系统输入法,同时让EditText能获取光标的代码部分(通过反射调用):
<span style="font-size:18px;">keyBoardLabel = (EditText) rootView .findViewById(R.id.wifi_key_input_edittext); // this.getActivity() // .getWindow() // .setSoftInputMode( // WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); try { Class<EditText> cls = EditText.class; Method setShowSoftInputOnFocus; setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class); setShowSoftInputOnFocus.setAccessible(true); setShowSoftInputOnFocus.invoke(keyBoardLabel, false); } catch (Exception e) { e.printStackTrace(); }</span>
先看XML文件: 这里使用到了ViewStub,为了不用一次性加载 过多的布局文件资源.ViewStub能更省内存!!
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="320dp" android:layout_height="320dp" android:background="@drawable/wifi_key_bg" android:clickable="true" android:gravity="center_horizontal" android:orientation="vertical" > <ImageView android:id="@+id/wifi_keyboard_exit" style="@style/Exit" android:src="@drawable/wifi_key_return" /> <!-- keyboard view --> <LinearLayout android:layout_width="320dp" android:layout_height="0dp" android:layout_weight="1" android:orientation="vertical" android:paddingLeft="29dp" android:paddingRight="29dp" > <!-- keyboard top --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:gravity="center" android:paddingBottom="3dp" > <ImageButton android:id="@+id/wifi_key_lpage_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_lpage" /> <EditText android:id="@+id/wifi_key_input_edittext" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:background="@drawable/wifi_key_edit_bg" android:gravity="center" android:singleLine="true" android:text="" android:textCursorDrawable="@drawable/edittext_cursor" /> <ImageButton android:id="@+id/wifi_key_rpage_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_rpage" /> </LinearLayout> <!-- true key board include other layout --> <ViewStub android:id="@+id/key_board_input_lower_viewstub" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout="@layout/key_board_lower_layout" android:paddingBottom="3dp" android:visibility="gone" /> <ViewStub android:id="@+id/key_board_input_upper_viewstub" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout="@layout/key_board_upper_layout" android:paddingBottom="3dp" android:visibility="gone" /> <ViewStub android:id="@+id/key_board_input_number_viewstub" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inflatedId="@+id/inflatedStart" android:layout="@layout/key_board_number" android:paddingBottom="3dp" android:visibility="gone" /> <ViewStub android:id="@+id/key_board_input_symbol1_viewstub" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inflatedId="@+id/inflatedStart" android:layout="@layout/key_board_symbol_1" android:paddingBottom="3dp" android:visibility="gone" /> <ViewStub android:id="@+id/key_board_input_symbol2_viewstub" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inflatedId="@+id/inflatedStart" android:layout="@layout/key_board_symbol_2" android:paddingBottom="3dp" android:visibility="gone" /> </LinearLayout> <!-- bottom change and delete --> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="-3dp" > <ImageButton android:id="@+id/wifi_key_board_delete_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_delete" /> <ImageButton android:id="@+id/wifi_key_board_connect_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="1dp" android:background="@drawable/wifi_key_connect" /> </LinearLayout> </LinearLayout></span>
接着是单个键盘的的XML布局,展示一个比较多键盘的就好了.其他的都很容易实现了
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" > <!-- top --> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageButton android:id="@+id/key_symbol_1_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_1" /> <ImageButton android:id="@+id/key_symbol_2_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_2" /> <ImageButton android:id="@+id/key_symbol_3_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_3" /> <ImageButton android:id="@+id/key_symbol_4_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_4" /> <ImageButton android:id="@+id/key_symbol_5_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_5" /> <ImageButton android:id="@+id/key_symbol_6_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_6" /> <ImageButton android:id="@+id/key_symbol_7_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_7" /> <ImageButton android:id="@+id/key_symbol_8_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_8" /> <ImageButton android:id="@+id/key_symbol_9_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_9" /> <ImageButton android:id="@+id/key_symbol_10_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_10" /> </LinearLayout> <!-- middle --> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:orientation="horizontal" > <ImageButton android:id="@+id/key_symbol_11_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_11" /> <ImageButton android:id="@+id/key_symbol_12_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_12" /> <ImageButton android:id="@+id/key_symbol_13_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_13" /> <ImageButton android:id="@+id/key_symbol_14_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_14" /> <ImageButton android:id="@+id/key_symbol_15_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_15" /> <ImageButton android:id="@+id/key_symbol_16_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_16" /> <ImageButton android:id="@+id/key_symbol_17_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_17" /> <ImageButton android:id="@+id/key_symbol_18_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_18" /> <ImageButton android:id="@+id/key_symbol_19_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_19" /> </LinearLayout> <!-- bottom --> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:orientation="horizontal" > <ImageButton android:id="@+id/key_symbol_20_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_20" /> <ImageButton android:id="@+id/key_symbol_21_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_21" /> <ImageButton android:id="@+id/key_symbol_22_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_22" /> <ImageButton android:id="@+id/key_symbol_23_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_23" /> <ImageButton android:id="@+id/key_symbol_24_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_24" /> <ImageButton android:id="@+id/key_symbol_25_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_25" /> <ImageButton android:id="@+id/key_symbol_26_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_26" /> <ImageButton android:id="@+id/key_symbol_27_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/wifi_key_symbol_27" /> </LinearLayout> </LinearLayout>最后是主要的代码部分,上关键代码,代码没什么注释,不过从命名一眼能看出来是什么,理解思路最重要,实现起来其实很简单,有什么疑问留言吧
package com.moco.launcher.wifi; import java.lang.reflect.Method; import android.annotation.SuppressLint; import android.content.ComponentName; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; import android.text.InputType; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.ViewStub; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.PopupWindow; import android.widget.Switch; import android.widget.TextView; import com.moco.launcher.R; import com.moco.launcher.activity.NewWifiSettingsActivity; import com.oazon.common.Logger; import com.oazon.moco.serialport.SerialControll; import com.oazon.voicelib.service.SpeechManage; public class WifInputFragment extends Fragment implements OnClickListener { private String TAG = "WifInputFragment"; private View rootView; private ConnectImpl connectImpl; private ImageView exitImg; private ViewStub lowerStub, upperStub, numberStub, symbol1Stub, symbol2Stub; private EditText keyBoardLabel; private ImageButton wifi_key_lpage_btn, wifi_key_board_delete_btn, wifi_key_rpage_btn, wifi_key_board_connect_btn; private StringBuffer mBuffer; public enum INPUT_TYPE { UPPER, LOWER, NUMBER, SYMBOL1, SYMBOL2 } private INPUT_TYPE currentType; private NewWifiSettingsActivity mContext; private PopupWindow mPopupWindow; private TextView tv; public WifInputFragment(ConnectImpl impl) { connectImpl = impl; mBuffer = new StringBuffer(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.i(TAG, "enter onCreateView---------"); rootView = inflater.inflate(R.layout.wifi_keyboard_layout, container, false); init(); loadKeyboardStub(INPUT_TYPE.LOWER); initKeyBoardLayout(); initPopupWindow(); return rootView; } private void initImageBG() { if (currentType == INPUT_TYPE.LOWER) { wifi_key_lpage_btn .setBackgroundResource(R.drawable.wifi_key_point_change); wifi_key_rpage_btn .setBackgroundResource(R.drawable.wifi_key_number_change); } else if (currentType == INPUT_TYPE.NUMBER) { wifi_key_lpage_btn .setBackgroundResource(R.drawable.wifi_key_abc_change); wifi_key_rpage_btn .setBackgroundResource(R.drawable.wifi_key_symbol_change); } else if (currentType == INPUT_TYPE.SYMBOL1) { wifi_key_lpage_btn .setBackgroundResource(R.drawable.wifi_key_number_change); wifi_key_rpage_btn .setBackgroundResource(R.drawable.wifi_key_point_change); } else if (currentType == INPUT_TYPE.SYMBOL2) { wifi_key_lpage_btn .setBackgroundResource(R.drawable.wifi_key_symbol_change); wifi_key_rpage_btn .setBackgroundResource(R.drawable.wifi_key_abc_change); } } private void initPopupWindow() { tv = new TextView(mContext); tv.setTextSize(30); tv.setTextColor(Color.BLACK); tv.setGravity(Gravity.CENTER_HORIZONTAL); tv.setPadding(0, 0, 0, 50); mPopupWindow = new PopupWindow(tv, -2, -2); mPopupWindow .setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); } private void init() { mContext = (NewWifiSettingsActivity) getActivity(); exitImg = (ImageView) rootView.findViewById(R.id.wifi_keyboard_exit); exitImg.setOnClickListener(this); keyBoardLabel = (EditText) rootView .findViewById(R.id.wifi_key_input_edittext); // this.getActivity() // .getWindow() // .setSoftInputMode( // WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); try { Class<EditText> cls = EditText.class; Method setShowSoftInputOnFocus; setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class); setShowSoftInputOnFocus.setAccessible(true); setShowSoftInputOnFocus.invoke(keyBoardLabel, false); } catch (Exception e) { e.printStackTrace(); } // keyBoardLabel.setCursorVisible(true); // keyBoardLabel.requestFocus(); wifi_key_lpage_btn = (ImageButton) rootView .findViewById(R.id.wifi_key_lpage_btn); wifi_key_lpage_btn.setOnClickListener(this); wifi_key_rpage_btn = (ImageButton) rootView .findViewById(R.id.wifi_key_rpage_btn); wifi_key_rpage_btn.setOnClickListener(this); wifi_key_board_connect_btn = (ImageButton) rootView .findViewById(R.id.wifi_key_board_connect_btn); wifi_key_board_connect_btn.setOnClickListener(this); wifi_key_board_delete_btn = (ImageButton) rootView .findViewById(R.id.wifi_key_board_delete_btn); wifi_key_board_delete_btn.setOnClickListener(this); wifi_key_board_delete_btn .setOnTouchListener(new KeyDeleteOnTouchListener()); upperStub = (ViewStub) rootView .findViewById(R.id.key_board_input_upper_viewstub); upperStub.inflate(); lowerStub = (ViewStub) rootView .findViewById(R.id.key_board_input_lower_viewstub); lowerStub.inflate(); numberStub = (ViewStub) rootView .findViewById(R.id.key_board_input_number_viewstub); numberStub.inflate(); symbol1Stub = (ViewStub) rootView .findViewById(R.id.key_board_input_symbol1_viewstub); symbol1Stub.inflate(); symbol2Stub = (ViewStub) rootView .findViewById(R.id.key_board_input_symbol2_viewstub); symbol2Stub.inflate(); } private void initKeyBoardLayout() { for (int i = 0; i < KeyBoardResource.UpperKeyBtnIds.length; i++) { ImageButton imgBtn = (ImageButton) rootView .findViewById(KeyBoardResource.UpperKeyBtnIds[i]); if (imgBtn != null) imgBtn.setOnTouchListener(new KeyImageBtnTouchListener()); } for (int i = 0; i < KeyBoardResource.LowerKeyBtnIds.length; i++) { ImageButton imgBtn = (ImageButton) rootView .findViewById(KeyBoardResource.LowerKeyBtnIds[i]); if (imgBtn != null) imgBtn.setOnTouchListener(new KeyImageBtnTouchListener()); } for (int i = 0; i < KeyBoardResource.NumberKeyBtnIds.length; i++) { ImageButton imgBtn = (ImageButton) rootView .findViewById(KeyBoardResource.NumberKeyBtnIds[i]); if (imgBtn != null) imgBtn.setOnTouchListener(new KeyImageBtnTouchListener()); } for (int i = 0; i < KeyBoardResource.symbol1.length; i++) { ImageButton imgBtn = (ImageButton) rootView .findViewById(KeyBoardResource.symbol1[i]); if (imgBtn != null) imgBtn.setOnTouchListener(new KeyImageBtnTouchListener()); } for (int i = 0; i < KeyBoardResource.symbol2.length; i++) { ImageButton imgBtn = (ImageButton) rootView .findViewById(KeyBoardResource.symbol2[i]); if (imgBtn != null) imgBtn.setOnTouchListener(new KeyImageBtnTouchListener()); } } private class KeyDeleteOnTouchListener implements OnTouchListener { private long currentTimeMillis_start; private long currentTimeMillis_move = 0; int duration = 0; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: currentTimeMillis_start = System.currentTimeMillis(); break; case MotionEvent.ACTION_MOVE: currentTimeMillis_move = System.currentTimeMillis(); duration = (int) (currentTimeMillis_move - currentTimeMillis_start); if (duration > 100) { if (mBuffer != null && mBuffer.length() > 0) { mBuffer.deleteCharAt(mBuffer.length() - 1); keyBoardLabel.setText(mBuffer.toString()); } else { keyBoardLabel.setText(""); } currentTimeMillis_start += 100; keyBoardLabel.setSelection(mBuffer.length()); } break; case MotionEvent.ACTION_UP: break; default: break; } return false; } } private class KeyImageBtnTouchListener implements OnTouchListener { private String result = ""; private int id; private float moveX; private float moveY; private float startY; private float startX; private float durationX; private float durationY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: id = v.getId(); if (id == R.id.key_lower_change_btn) { changeUpperAndLowerBoard(); return true; } else if (id == R.id.key_upper_change_btn) { changeUpperAndLowerBoard(); return true; } startX = event.getRawX(); startY = event.getRawY(); result = KeyBoardResource.getCharById(v.getId()); Log.i(TAG, "click char is:" + result); if (id == R.id.key_symbol_44_btn) { tv.setText(""); tv.setBackgroundResource(R.drawable.wifi_key_board_1); } else if (id == R.id.key_symbol_51_btn) { tv.setText(""); tv.setBackgroundResource(R.drawable.wifi_key_board_2); } else { tv.setText(result); tv.setBackgroundResource(R.drawable.wifi_key_board_up_bg); } if (currentType == INPUT_TYPE.NUMBER) { mPopupWindow.showAsDropDown(v, 10, -90); } else { mPopupWindow.showAsDropDown(v, -10, -90); } break; case MotionEvent.ACTION_MOVE: moveX = event.getRawX(); moveY = event.getRawY(); durationX = Math.abs(moveX - startX); durationY = Math.abs(moveY - startY); if (durationX > 10 || durationY > 10) { mPopupWindow.dismiss(); } break; case MotionEvent.ACTION_UP: mPopupWindow.dismiss(); mBuffer.append(result); Log.i(TAG, "after mBuffer char is:" + mBuffer.toString()); keyBoardLabel.setText(mBuffer); keyBoardLabel.setSelection(mBuffer.length()); break; default: break; } return true; } } @SuppressLint("NewApi") private void loadKeyboardStub(INPUT_TYPE type) { upperStub.setVisibility(View.GONE); lowerStub.setVisibility(View.GONE); numberStub.setVisibility(View.GONE); symbol1Stub.setVisibility(View.GONE); symbol2Stub.setVisibility(View.GONE); switch (type) { case UPPER: upperStub.setVisibility(View.VISIBLE); break; case LOWER: lowerStub.setVisibility(View.VISIBLE); break; case NUMBER: numberStub.setVisibility(View.VISIBLE); break; case SYMBOL1: symbol1Stub.setVisibility(View.VISIBLE); break; case SYMBOL2: symbol2Stub.setVisibility(View.VISIBLE); break; } currentType = type; initImageBG(); } private void deleteBuffer() { Log.i(TAG, "enter deleteBuffer()"); if (mBuffer != null && mBuffer.length() > 0) { mBuffer.deleteCharAt(mBuffer.length() - 1); } if (mBuffer != null && mBuffer.length() > 0) { keyBoardLabel.setText(mBuffer.toString()); } else { keyBoardLabel.setText(""); } keyBoardLabel.setSelection(mBuffer.length()); } public void change2RightKeyBoard() { if (currentType == INPUT_TYPE.LOWER || currentType == INPUT_TYPE.UPPER) currentType = INPUT_TYPE.NUMBER; else if (currentType == INPUT_TYPE.NUMBER) currentType = INPUT_TYPE.SYMBOL1; else if (currentType == INPUT_TYPE.SYMBOL1) currentType = INPUT_TYPE.SYMBOL2; else if (currentType == INPUT_TYPE.SYMBOL2) currentType = INPUT_TYPE.LOWER; loadKeyboardStub(currentType); } public void change2LeftKeyBoard() { if (currentType == INPUT_TYPE.LOWER || currentType == INPUT_TYPE.UPPER) currentType = INPUT_TYPE.SYMBOL2; else if (currentType == INPUT_TYPE.SYMBOL2) currentType = INPUT_TYPE.SYMBOL1; else if (currentType == INPUT_TYPE.SYMBOL1) currentType = INPUT_TYPE.NUMBER; else if (currentType == INPUT_TYPE.NUMBER) currentType = INPUT_TYPE.LOWER; loadKeyboardStub(currentType); } public void changeUpperAndLowerBoard() { if (currentType == INPUT_TYPE.UPPER) loadKeyboardStub(INPUT_TYPE.LOWER); else if (currentType == INPUT_TYPE.LOWER) loadKeyboardStub(INPUT_TYPE.UPPER); loadKeyboardStub(currentType); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.wifi_key_lpage_btn: change2LeftKeyBoard(); break; case R.id.wifi_key_rpage_btn: change2RightKeyBoard(); break; case R.id.wifi_keyboard_exit: clearEditText(); getActivity().onBackPressed(); break; case R.id.wifi_key_board_delete_btn: deleteBuffer(); break; case R.id.wifi_key_board_connect_btn: Log.i(TAG, ""); if (mBuffer.toString().equals("com.moco")) { ComponentName componetName = new ComponentName( "com.example.dragontest", "com.example.dragontest.MainActivity"); Intent intent = new Intent(); intent.setComponent(componetName); startActivity(intent); android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); } ((NewWifiSettingsActivity) getActivity()).connect(mBuffer .toString()); clearEditText(); connectImpl.exit(ConnectImpl.INPUT); break; default: break; } } public void clearEditText() { mBuffer.delete(0, mBuffer.length()); if (keyBoardLabel != null) keyBoardLabel.setText(""); } @Override public void onPause() { Logger.d(TAG, "onPause=="); SerialControll.getInstance().startControl(); SpeechManage.getInstance().startWake(); super.onPause(); } @Override public void onResume() { Logger.d(TAG, "onResume=="); super.onResume(); SerialControll.getInstance().stopControl(); SpeechManage.getInstance().stopWake(); } @Override public void onDestroyView() { super.onDestroyView(); } @Override public void onDestroy() { super.onDestroy(); } @Override public void onLowMemory() { Logger.d(TAG, "onLowMemory=="); SerialControll.getInstance().startControl(); SpeechManage.getInstance().startWake(); super.onLowMemory(); } }
相关文章推荐
- 使用Android Studio时的一个问题
- Android 5.0新特性ToolBar
- android可扩展自己的定义,运动图像裁剪框
- Android Api Demos登顶之路(七十八)Graphics-->MeansureText
- Android开机启动扫描SD卡apk流程
- Android判断当前线程是否是主线程的方法
- AndroidStudio 如何生成秘钥?
- Android Studio cannot launch avd in emulator解决方案
- 模拟Android路径浏览器
- Android设计支持库(Android Design Support Library)
- Android Studio网盘下载
- android为ImageView使用蒙层
- 【android】环形进度条实现
- Android中运行的错误:java.lang.UnsatisfiedLinkError: Couldn't load locSDK3: findLibrary returned null.
- Android 位置服务——BaiduLocation的使用
- android 图片压缩
- Android工具栏--ActionBar
- android 图片压缩 生成缩略图方法
- Android SDK 更新代理
- Android图片压缩(质量压缩和尺寸压缩)