温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么解决Android Studio xml 格式化不自动换行的问题

发布时间:2021-05-07 14:56:35 来源:亿速云 阅读:401 作者:小新 栏目:移动开发

这篇文章给大家分享的是有关怎么解决Android Studio xml 格式化不自动换行的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Android是什么

Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。

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

如图:

怎么解决Android Studio xml 格式化不自动换行的问题

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

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

怎么解决Android Studio xml 格式化不自动换行的问题

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

怎么解决Android Studio xml 格式化不自动换行的问题

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

补充知识: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 < count; i++) {       measureChild(getChildAt(i), widthMeasureSpec, heightMeasureSpec);     }     int widthMode = MeasureSpec.getMode(widthMeasureSpec);     if (widthMode != MeasureSpec.EXACTLY) {       widthMeasureSpec = MeasureSpec.makeMeasureSpec(           getAutoLinefeedWidth(width), widthMode);     }     int heightMode = MeasureSpec.getMode(heightMeasureSpec);     if (heightMode != MeasureSpec.EXACTLY) {       heightMeasureSpec = MeasureSpec.makeMeasureSpec(           getAutoLinefeedHeight(width), heightMode);     }     super.onMeasure(widthMeasureSpec, heightMeasureSpec);   }   /**    * 自动换行 计算需要的宽度    *    * @param width 可用宽度    * @return 需要的宽度    */   private int getAutoLinefeedWidth(int width) {     int totalWidth = getPaddingLeft() + getPaddingRight();     for (int i = 0; i < getChildCount(); i++) {       if (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 < getChildCount(); i++) {       View child = getChildAt(i);       int childWidth = child.getMeasuredWidth();       int childHeight = child.getMeasuredHeight();       //这个child需要的宽度 如果不是第一位的 那么需要加上间距       //这里是用来判断需不需要换行       int needWidth = i == 0 ? childWidth : (childWidth + mHorizontalSpacing);       //如果剩余可用宽度小于需要的长度 那么换行       if (availableLineWidth < needWidth) {         totalHeight = totalHeight + lineMaxHeight;         if (i > 0) totalHeight += mVerticalSpacing;         availableLineWidth = lineWidth;         lineMaxHeight = 0;         lineChildIndex = 0;       }       //这个child需要的宽度 如果不是第一位的 那么需要加上间距       int realNeedWidth = lineChildIndex == 0 ? 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 < count; i++) {       View child = getChildAt(i);       int childWidth = child.getMeasuredWidth();       int childHeight = child.getMeasuredHeight();       int needWidth = i == 0 ? childWidth : (childWidth + mHorizontalSpacing);       if (availableLineWidth < needWidth) {         availableLineWidth = lineWidth;         childTop += lineMaxHeight;         if (i > 0) childTop += mVerticalSpacing;         lineMaxHeight = 0;         childLeft = getPaddingLeft();         lineChildIndex = 0;       }       int realNeedWidth = lineChildIndex == 0 ? 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中添加以下代码(实现子控件的边距):

<declare-styleable name="AntoLineUtil">     <attr name="horizontalSpacing" format="dimension"/>     <attr name="verticalSpacing" format="dimension"/>   </declare-styleable>

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

<com.inpor.fmctv.util.AntoLineUtil     android:id="@+id/camera_group"     android:layout_width="@dimen/size_dp_630"     android:layout_height="@dimen/size_dp_138"     android:layout_marginTop="@dimen/size_dp_18"     android:orientation="horizontal"     app:horizontalSpacing="@dimen/size_dp_18"     app:verticalSpacing="@dimen/size_dp_18"> </com.inpor.fmctv.util.AntoLineUtil>

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

<?xml version="1.0" encoding="utf-8"?> <LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"   android:id="@+id/video_preview_item"   android:layout_width="@dimen/size_dp_198"   android:layout_height="@dimen/size_dp_60"   android:orientation="horizontal"   android:paddingLeft="@dimen/size_dp_18"   android:paddingRight="@dimen/size_dp_18"   android:gravity="center_vertical"   android:background="@color/textcolor_395878">   <TextView     android:id="@+id/video_preview_item_tv"     android:layout_width="@dimen/size_dp_120"     android:layout_height="wrap_content"     android:textSize="@dimen/size_sp_24"     android:textColor="@color/white"/>   <CheckBox     android:id="@+id/video_previ"     android:layout_width="@dimen/size_dp_24"     android:layout_height="@dimen/size_dp_24"     android:button="@null"     android:background="@drawable/radio_button_select_ico" /> </LinearLayout>

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

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 格式化不自动换行的问题

感谢各位的阅读!关于“怎么解决Android Studio xml 格式化不自动换行的问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI