安卓实用开发小知识 1704

水深无声 2022-06-17 01:08 344阅读 0赞

安卓实用开发小知识 1704

  • Edittext设置android:focusable=“false”禁止输入之后,再次用setFocusable(true)无法输入,可通过以下方法令edittext重新获得焦点可输入文字:

    edittext.setFocusable(true);//—设置edittext是否可以获得焦点
    edittext.setFocusableInTouchMode(true);//—设置edittext在touch模式下是否可以获得焦点
    edittext.requestFocus();//—调用该方法给指定的view或者它的子view焦点。如果这个view在isFocusable()方法下返回false,或者isFocusableInTouchMode()方法下返回false,这个view不会真正获得焦点
    edittext.requestFocusFromTouch();//—调用这个给指定的view或者它的子view焦点。这个特别的变异于(?)requestFocus()的方法会让在这个view被touch时,给view焦点。

参考:http://blog.csdn.net/nonosama0125/article/details/43160349

  • RecyclerView嵌套RecyclerView离开界面再回来时,位置变动博客出处,里面的RecyclerView抢先获取到焦点,导致界面上一到item的顶部,解决办法是在外部的RecyclerView加上:

    android:descendantFocusability=”blocksDescendants”

    关于descendantFocusability
    beforeDescendants:viewgroup会优先其子类控件而获取到焦点

    1. afterDescendantsviewgroup只有当其子类控件不需要获取焦点时才获取焦点
    2. blocksDescendantsviewgroup会覆盖子类控件而直接获得焦点

参考:http://blog.csdn.net/yingpaixiaochuan/article/details/53190420

  • 安卓USB开发
    1.发现设备

    UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
    Map usbList = usbManager.getDeviceList();

2.授权

  1. if (!usbManager.hasPermission(usbDevice)) {
  2. usbPermissionReceiver = new UsbPermissionReceiver();
  3. //申请权限
  4. Intent intent = new Intent(ACTION_DEVICE_PERMISSION);
  5. PendingIntent mPermissionIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
  6. IntentFilter permissionFilter = new IntentFilter(ACTION_DEVICE_PERMISSION);
  7. context.registerReceiver(usbPermissionReceiver, permissionFilter);
  8. usbManager.requestPermission(usbDevice, mPermissionIntent);
  9. }
  10. private class UsbPermissionReceiver extends BroadcastReceiver {
  11. public void onReceive(Context context, Intent intent) {
  12. String action = intent.getAction();
  13. if (ACTION_DEVICE_PERMISSION.equals(action)) {
  14. synchronized (this) {
  15. UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
  16. if (device.getDeviceName().equals(usbDevice.getDeviceName()) {
  17. if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
  18. //授权成功,在这里进行打开设备操作
  19. } else {
  20. //授权失败
  21. }
  22. }
  23. }
  24. }
  25. }
  26. }

3.获取输入输出端口

  1. usbInterface=usbDevice.getInterface(0);
  2. for (int index = 0; index < usbInterface.getEndpointCount(); index++) {
  3. UsbEndpoint point = usbInterface.getEndpoint(index);
  4. if (point.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
  5. if (point.getDirection() == UsbConstants.USB_DIR_IN) {
  6. usbEndpointIn = point;
  7. } else if (point.getDirection() == UsbConstants.USB_DIR_OUT) {
  8. usbEndpointOut = point;
  9. }
  10. }
  11. }

4 数据传输

  1. usbDeviceConnection = usbManager.openDevice(usbDevice);
  2. //发送数据
  3. int ret = usbDeviceConnection.bulkTransfer(usbEndpointOut, data, data.length, DEFAULT_TIMEOUT);
  4. //接收数据
  5. int inMax = inEndpoint.getMaxPacketSize();
  6. ByteBuffer byteBuffer = ByteBuffer.allocate(inMax);
  7. UsbRequest usbRequest = new UsbRequest();
  8. usbRequest.initialize(connection, inEndpoint);
  9. usbRequest.queue(byteBuffer, inMax);
  10. if(connection.requestWait() == usbRequest){
  11. byte[] retData = byteBuffer.array();
  12. for(Byte byte1 : retData){
  13. System.err.println(byte1);
  14. }
  15. }

参考:https://juejin.im/post/58eaff05ac502e006c43e114

发表评论

表情:
评论列表 (有 0 条评论,344人围观)

还没有评论,来说两句吧...

相关阅读

    相关 实用知识

    一、苹果电脑   1. 无法正常开关机:     首先尝试: shift + control + option + 开机键 重置 SMC,按住4、5秒松手后等待30秒以上再