日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

解決Android Studio xml 格式化不自動換行的問題

瀏覽:267日期:2022-09-26 14:19:45

今天把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: 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: 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: android:layout_width='@dimen/size_dp_120' android:layout_height='wrap_content' android:textSize='@dimen/size_sp_24' android:textColor='@color/white'/> <CheckBox android: 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); // 此處是找到父控件LinearLayoutfor (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 格式化不自動換行的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩激情综合| 99国产精品99久久久久久粉嫩| 麻豆精品视频在线观看| 中文精品视频| 国产99久久久国产精品成人免费| 六月丁香综合在线视频| 欧美久久精品| 国产无遮挡裸体免费久久| 视频一区视频二区在线观看| 五月婷婷六月综合| 午夜欧美在线| 美国三级日本三级久久99| 爽好多水快深点欧美视频| 亚洲一区国产一区| 久久亚洲色图| 亚欧洲精品视频在线观看| 石原莉奈一区二区三区在线观看| 久久久久国产一区二区| 国产99久久| 免费成人在线视频观看| 日韩激情视频网站| 国产情侣一区| 成人午夜在线| 国产亚洲毛片| 国产精品久久久一区二区| 欧美激情视频一区二区三区免费| 久久精品国产成人一区二区三区| 老色鬼精品视频在线观看播放| 福利视频一区| 国产亚洲午夜| 久久影院资源站| 久久九九国产| 视频一区二区国产| 国产精品欧美三级在线观看| 国产白浆在线免费观看| 一区免费视频| 国产精品2区| 久久高清免费| 国产精品mv在线观看| 亚洲a在线视频| 91精品国产自产在线丝袜啪| 日本综合字幕| 国产免费久久| 国产综合亚洲精品一区二| 日韩精品社区| 激情五月综合网| 欧美黑人巨大videos精品| 日韩一区亚洲二区| 日本色综合中文字幕| 久久中文亚洲字幕| 国产精品mm| 综合干狼人综合首页| 日韩深夜视频| 久久精品99国产精品日本| 黄色亚洲精品| 欧美日韩一二三四| 精品黄色一级片| 日韩在线视频一区二区三区| 私拍精品福利视频在线一区| 久久av网站| 日本午夜免费一区二区| 尤物精品在线| 亚洲天堂资源| 久久精品国产精品亚洲毛片| 日本精品一区二区三区在线观看视频| 亚洲成人二区| 日韩欧美一区二区三区在线观看| 国产亚洲欧美日韩在线观看一区二区 | 美女高潮久久久| 亚洲精品美女| 中文无码日韩欧| 亚洲精品第一| 婷婷综合网站| 天堂av在线一区| 欧美日韩日本国产亚洲在线| 亚洲国产综合在线看不卡| 久久久水蜜桃av免费网站| 欧美日韩中文字幕一区二区三区 | 99国产精品自拍| 蜜乳av另类精品一区二区| 美女日韩在线中文字幕| 综合国产在线| 国产情侣久久| 精品日韩一区| 成人免费电影网址| 欧美日韩国产在线观看网站| 久久久久国产精品一区三寸| 最新国产拍偷乱拍精品| 免费久久99精品国产| 日韩av影院| 欧美激情久久久久久久久久久| 麻豆国产精品| 日本视频一区二区| 国产精品扒开腿做爽爽爽软件| 久久精品一本| 国产精品毛片| 精品国产18久久久久久二百| 免费视频一区三区| 欧美欧美黄在线二区| 日韩欧美精品一区| 亚洲精品极品| 亚洲精品极品| 久久久久久久欧美精品| 日韩精品久久理论片| 欧美精品观看| 国产一区二区三区久久久久久久久| 国产一区二区三区探花| 久久久噜噜噜| 久久国产精品亚洲77777| 中文字幕一区二区三区在线视频| 国产欧美91| 蜜桃成人av| 88久久精品| 精品一区二区三区中文字幕在线| 午夜影院一区| 久久亚洲风情| 久久中文精品| 亚洲人亚洲人色久| 欧美亚洲日本精品| 日韩高清三区| 婷婷中文字幕一区| 国产一区二区三区视频在线| 激情国产在线| 久久狠狠亚洲综合| 韩国精品主播一区二区在线观看 | 国产欧美一区二区精品久久久 | 成人日韩av| 日韩精品一区二区三区中文| 岛国av免费在线观看| 中文无码久久精品| 一区二区三区四区日本视频| 美女少妇全过程你懂的久久| 91精品日本| 国产色综合网| 午夜精品成人av| 欧美精品aa| 蜜臀精品久久久久久蜜臀| 国产91精品对白在线播放| 国产精品99久久免费| 日韩精品中文字幕一区二区| 91精品成人| 欧美va天堂| www在线观看黄色| 久久av导航| 日韩精品欧美精品| 亚洲精品日本| jiujiure精品视频播放| 亚洲黄色中文字幕| 国产精品亚洲综合在线观看| 欧美一区91| 卡一卡二国产精品| 麻豆国产一区| 青青国产精品| 麻豆久久久久久| 国产精品a级| 91一区二区| 97精品国产一区二区三区 | 久久精品国产亚洲夜色av网站 | 国产午夜久久av| 国产精品综合| 精品一区二区三区亚洲| 久久影院资源站| 黄毛片在线观看| 午夜久久美女| 蜜桃久久av一区| 日韩国产成人精品| 精品国产一区二区三区av片| 日本一区二区免费高清| 日本韩国欧美超级黄在线观看| 蜜臀久久99精品久久一区二区| 国产午夜精品一区二区三区欧美 | 香蕉视频成人在线观看| 蜜臀av亚洲一区中文字幕| 婷婷综合国产| 国产一区二区亚洲| 欧美日韩国产探花| 日韩精品免费视频一区二区三区| 日韩精品视频中文字幕| 美腿丝袜亚洲三区| 日韩av免费大片| 久久xxxx精品视频| 91免费精品国偷自产在线在线| 成人免费一区| 免费黄网站欧美| 久久精品xxxxx| 精品1区2区3区4区| 久久免费福利| 亚洲小说春色综合另类电影| 国产精品免费不| 午夜日韩av| 日韩精品欧美成人高清一区二区| 亚洲免费福利| 久久国际精品| 日韩亚洲国产欧美| 成人影视亚洲图片在线| 亚洲日产av中文字幕| 亚洲国产一区二区在线观看 | 日韩av一区二区三区四区| 亚洲va中文在线播放免费| 日韩在线电影|