91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-05-07 14:56:35 來源:億速云 閱讀:330 作者:小新 欄目:移動開發

這篇文章給大家分享的是有關怎么解決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

隆回县| 清水河县| 揭阳市| 桂东县| 静宁县| 广西| 阜平县| 平顺县| 忻州市| 娱乐| 临西县| 潼南县| 汤阴县| 桑植县| 乡宁县| 赤壁市| 霍邱县| 南岸区| 平凉市| 邳州市| 宁乡县| 武隆县| 中宁县| 海淀区| 黑山县| 图片| 林口县| 利津县| 通山县| 上蔡县| 景谷| 贡山| 出国| 民乐县| 绥德县| 类乌齐县| 华容县| 宾阳县| 隆安县| 峡江县| 疏勒县|