热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

解决AndroidStudioxml格式化不自动换行的问题

这篇文章主要介绍了解决AndroidStudioxml格式化不自动换行的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

今天把Android Studio 2.3 更新为了3.0 遇到一个蛋疼的问题

如图:

格式化完代码后发现不会自动换行了,看着真心不爽。

后来发现其实是设置问题,如图:

只要把这里打上√就可以了。

在此记录一下,希望可以帮到后面的小伙伴

补充知识:Android实现控件内自动换行(比如LinearLayout内部实现子控件换行 )

一、创建类AntoLineUtil(换行操作主要在这里实现)

package com.inpor.fmctv.util;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import com.inpor.fmctv.R;

public class AntoLineUtil extends ViewGroup {

  /**
   * 子view左右间距
   */
  private int mHorizontalSpacing;
  /**
   * 子view上下行距离
   */
  private int mVerticalSpacing;
  
  private Context context;


  public AntoLineUtil(Context context) {
    this(context, null);
    this.cOntext= context;
  }

  public AntoLineUtil(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }

  public AntoLineUtil(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    if (attrs != null) {
      TypedArray array = context.obtainStyledAttributes(attrs,
          R.styleable.AntoLineUtil);

      mHorizOntalSpacing= array.getDimensionPixelOffset(
          R.styleable.AntoLineUtil_horizontalSpacing, 0);
      mVerticalSpacing = array.getDimensionPixelOffset(
          R.styleable.AntoLineUtil_verticalSpacing, 0);
      array.recycle();

      if (mHorizontalSpacing <0) mHorizOntalSpacing= 0;
      if (mVerticalSpacing <0) mVerticalSpacing = 0;
    }
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    int width = MeasureSpec.getSize(widthMeasureSpec);
    int count = getChildCount();
    for (int i = 0; i  0) totalWidth += mHorizontalSpacing;
      View child = getChildAt(i);
      int childWidth = child.getMeasuredWidth();
      totalWidth += childWidth;
      if (totalWidth >= width) {
        totalWidth = width;
        break;
      }
    }

    return totalWidth;
  }

  /**
   * 自动换行 计算需要的高度
   *
   * @param width 可用宽度
   * @return 需要的高度
   */
  private int getAutoLinefeedHeight(int width) {

    //一行最大可用宽度
    int lineWidth = width - getPaddingLeft() - getPaddingRight();
    //剩余可用宽度
    int availableLineWidth = lineWidth;
    //需要的高度
    int totalHeight = getPaddingTop() + getPaddingBottom();
    int lineChildIndex = 0;
    //本行最大高度
    int lineMaxHeight = 0;
    for (int i = 0; i  0) totalHeight += mVerticalSpacing;
        availableLineWidth = lineWidth;
        lineMaxHeight = 0;
        lineChildIndex = 0;
      }
      //这个child需要的宽度 如果不是第一位的 那么需要加上间距
      int realNeedWidth = lineChildIndex == 0 &#63; childWidth : (childWidth + mHorizontalSpacing);
      lineMaxHeight = Math.max(childHeight, lineMaxHeight);
      availableLineWidth = availableLineWidth - realNeedWidth;
      lineChildIndex++;
    }

    totalHeight = totalHeight + lineMaxHeight;
    return totalHeight;
  }


  @Override
  protected void onLayout(boolean changed, int l, int t, int r, int b) {
    layout();
  }


  private void layout() {

    int count = getChildCount();
    int childLeft = getPaddingLeft();
    int childTop = getPaddingTop();
    int lineWidth = getMeasuredWidth() - getPaddingRight() - getPaddingLeft();
    int availableLineWidth = lineWidth;
    int lineChildIndex = 0;
    //一行的最大高度
    int lineMaxHeight = 0;
    for (int i = 0; i  0) childTop += mVerticalSpacing;
        lineMaxHeight = 0;
        childLeft = getPaddingLeft();
        lineChildIndex = 0;
      }

      int realNeedWidth = lineChildIndex == 0 &#63; childWidth : (childWidth + mHorizontalSpacing);

      lineMaxHeight = Math.max(lineMaxHeight, childHeight);
      child.layout(childLeft + realNeedWidth - childWidth, childTop, childLeft + realNeedWidth, childTop + childHeight);
      availableLineWidth -= realNeedWidth;
      childLeft += realNeedWidth;
      lineChildIndex++;
    }
  }

  public int getHorizontalSpacing() {
    return mHorizontalSpacing;
  }

  public void setHorizontalSpacing(int horizontalSpacing) {
    mHorizOntalSpacing= horizontalSpacing;
  }

  public int getVerticalSpacing() {
    return mVerticalSpacing;
  }

  public void setVerticalSpacing(int verticalSpacing) {
    mVerticalSpacing = verticalSpacing;
  }
}

二、在values中的attrs.xml中添加以下代码(实现子控件的边距):


    
    
  

三、添加固定的xml布局父控件,事先写好,布局activity_video_preview.xml :



四、添加固定的xml布局子控件,事先写好,动态添加进去,布局item_camera_info.xml :

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  

五、在其他方法中动态添加子控件:

AntoLineUtil cameraGroup = (AntoLineUitl) findViewById(R.id.camera_group); // 此处是找到父控件LinearLayout
for (int i = 0; i<6; i++) {
 // 用以下方法将layout布局文件换成view
 LayoutInflater inflater = getLayoutInflater();
 View view = inflater.inflate(R.layout.item_camera_info,null);
 TextView textView = view.findViewById(R.id.video_preview_item_tv);
 textView.setText("摄像头"+ (cameraId+1));
 cameraGroup.addView(view);
}

六、效果图:

以上这篇解决Android Studio xml 格式化不自动换行的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 问题概述:在本地环境中代码运行正常,但部署到服务器后出现错误。具体表现为NCManager和SAXBuilder无法解析为类型。 ... [详细]
  • 本文探讨了如何将Python对象转换为字节流,以实现文件保存、数据库存储或网络传输的需求。主要介绍了利用pickle模块进行序列化的具体方法。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
author-avatar
双语的家_352
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有