安卓开发 如何在布局文件中添加表格样式

安卓开发 如何在布局文件中添加表格样式,第1张

使用TableLayout表格布局

表格布局模型以行列的形式管理子控件,每一行为一个TableRow的对象,当然也可以是一个View的对象。TableRow可以添加子控件,每添加一个为一列。

TableLayout属性:

  android:collapseColumns:将TableLayout里面指定的列隐藏,若有多列需要隐藏,请用逗号将需要隐藏的列序号隔开。

  android:stretchColumns:设置指定的列为可伸展的列,以填满剩下的多余空白空间,若有多列需要设置为可伸展,请用逗号将需要伸展的列序号隔开。

  android:shrinkColumns:设置指定的列为可收缩的列。当可收缩的列太宽(内容过多)不会被挤出屏幕。当需要设置多列为可收缩时,将列序号用逗号隔开。

元素(Button)属性:(奇怪的是button 里面没有android:layout_column 和android:layout_span两个属性,写进去无反应,还不知道为什么)

  android:layout_colum:设置该控件在TableRow中指定的列。

  android:layout_span:设置该控件所跨越的列数。

1、线性布局适合线性分布的场景,比如几个按钮横向摆一排,也比较适合一个布局适配所有分辨率(weight属性)。

2、表格布局适合表格形态的场景,比如一行一行的很有规律。

3、相对布局适合杂乱分布的场景,并且可以有图层效果,里边的控件可以重叠。

这种情况可能是你用了相对布局或线性布局,里面嵌套了表格布局,可能还在表格里面嵌套了其他布局。建议最外层使用相对布局,里面嵌套一层线性布局,然后在线性布局里面再嵌一层相对布局,切换到可视化的布局界面,用手动拖动按钮的方式进行布局就可以实现边框右对齐。

一、  界面布局之线性布局(LinearLayout)

这种布局比较常用,也比较简单,就是每个元素占一行,把它按照横向排放,也就是每个元素占一列。在布局中都按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。

二、  界面布局之相对布局(RelativeLayout)

相对布局是android界面设计中比较常用和好用的一个布局方式。

三、  界面布局之表格布局(TableLayout)

表格布局采用行、列的形式来管理元素组件。TableLayout的行和列不需要声明,而是采用添加方法控制。

每次在TableLayout中添加一个TableRow,一个TableRow就代表表格中的一行,也同样是容器,往里面添加一个子组件就代表增加一列。在表格布局中,列的宽度由最宽的那个单元格决定,整个表格布局宽度取决于父容器的宽度

四、  界面布局之绝对布局(AbsoluteLayout)

特点:以坐标的方式来定位在屏幕上的位置,引起缺乏灵活性,在没有绝对定位的情况下相比其他类型的布局更难维护

五、  界面布局之帧布局(FrameLayout)

FrameLayout是五大布局中最简单的一个布局。在帧布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。

转自长沙软件公司---小房子

在每一行的tablerow属性中也要加上权重1代表平均分成三行

android:layout_weight="1"

边框线并不在table的范畴,因为放大来看,button控件的边框和tablerow的边框是重合的,意味着这个空隙是button控件自带的,tablerow边框设置无效。

本文链接:https://blogcsdnnet/weixin_37577039/article/details/79090433

```

<xml version="10" encoding="utf-8">

<shape xmlns:android="http://schemasandroidcom/apk/res/android">

    <solid android:color="@color/colorAccent" />

    <!-- 这里是设置为四周 也可以单独设置某个位置为圆角-->

    <corners android:topLeftRadius="5dp"

        android:topRightRadius="5dp"

        android:bottomRightRadius="5dp"

        android:bottomLeftRadius="5dp"/>

    <stroke android:width="1dp" android:color="#000000" />

</shape

```

```

<xml version="10" encoding="UTF-8">

<layer-list xmlns:android="http://schemasandroidcom/apk/res/android">   

<!-- 边框颜色值 -->

<item>   

      <shape>   

            <solid android:color="#3bbaff" />   

      </shape>   

</item>   

<!--这个是按钮边框设置为四周 并且宽度为1-->

<item

android:right="1dp"

android:left="1dp"

android:top="1dp"

android:bottom="1dp">

    <shape>   

<!--这个是背景颜色-->

          <solid android:color="#ffffff" />       

<!--这个是按钮中的字体与按钮内的四周边距-->

          <padding android:bottom="10dp"   

                android:left="10dp"   

                android:right="10dp"   

                android:top="10dp" />   

    </shape>       

</item>   

</layer-list>

```

使用:

```android:background="@drawable/button_edge"```

```

<xml version="10" encoding="UTF-8">

<shape

    xmlns:android="http://schemasandroidcom/apk/res/android"

    android:shape="rectangle">

    <!-- 填充的颜色 -->

    <solid android:color="#FFFFFF" />

    <!-- android:radius 弧形的半径 -->

    <!-- 设置按钮的四个角为弧形 -->

    <corners

    android:radius="5dip" /> 

    <!--也可单独设置-->

    <!-- <corners -->

  <!-- android:topLeftRadius="10dp"-->

  <!-- android:topRightRadius="10dp"-->

  <!-- android:bottomRightRadius="10dp"-->

  <!--  android:bottomLeftRadius="10dp"-->

<!--  />  -->

        设置文字padding

    <!-- padding:Button里面的文字与Button边界的间隔 -->

    <padding

        android:left="10dp"

        android:top="10dp"

        android:right="10dp"

        android:bottom="10dp"

        />

</shape>

```

```

<xml version="10" encoding="utf-8">

<shape xmlns:android="http://schemasandroidcom/apk/res/android">

    <solid android:color="#FFFFFF" />

    <corners android:topLeftRadius="10dp"

        android:topRightRadius="10dp"

        android:bottomRightRadius="10dp"

        android:bottomLeftRadius="10dp"/>

</shape>

```

使用:

```

android:background="@drawable/image_circle"

```

```

Glidewith(MainActivitythis)load(croppedUri)

transform(new GlideRectRound(MainActivitythis,6))into(headIcon);

```

```

import androidcontentContext;

import androidcontentresResources;

import androidgraphicsBitmap;

import androidgraphicsBitmapShader;

import androidgraphicsCanvas;

import androidgraphicsPaint;

import androidgraphicsRectF;

import androidutilLog;

import combumptechglideloadenginebitmap_recycleBitmapPool;

import combumptechglideloadresourcebitmapBitmapTransformation;

/

Created by SiHao on 2018/3/3

Glide 的 圆角 工具类

/

public class GlideRectRound extends BitmapTransformation {

    private static float radius = 0f;

    // 构造方法1 无传入圆角度数 设置默认值为5

    public GlideRectRound(Context context) {

        this(context, 5);

    }

    // 构造方法2 传入圆角度数

    public GlideRectRound(Context context, int dp) {

        super(context);

        // 设置圆角度数

        radius = ResourcesgetSystem()getDisplayMetrics()density dp;

    }

    // 重写该方法 返回修改后的Bitmap

    @Override

    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {

        return rectRoundCrop(pool,toTransform);

    }

    @Override

    public String getId() {

        Loge("getID",getClass()getName() + Mathround(radius));

        return getClass()getName() + Mathround(radius);  // 四舍五入

    }

    private Bitmap rectRoundCrop(BitmapPool pool, Bitmap source){

        if (source == null) return null;

        Bitmap result = poolget(sourcegetWidth(), sourcegetHeight(), BitmapConfigARGB_8888); // ARGB_4444——代表4x4位ARGB位图,ARGB_8888——代表4x8位ARGB位图

        if (result == null) {

            result = BitmapcreateBitmap(sourcegetWidth(), sourcegetHeight(), BitmapConfigARGB_8888);

        }

        Canvas canvas = new Canvas(result);

        Paint paint = new Paint();

        // setShader 对图像进行渲染

        // 子类之一 BitmapShader设置Bitmap的变换  TileMode 有CLAMP (取bitmap边缘的最后一个像素进行扩展),REPEAT(水平地重复整张bitmap)

        //MIRROR(和REPEAT类似,但是每次重复的时候,将bitmap进行翻转)

        paintsetShader(new BitmapShader(source, BitmapShaderTileModeCLAMP, BitmapShaderTileModeCLAMP));

        paintsetAntiAlias(true);  // 抗锯齿

        RectF rectF = new RectF(0f, 0f, sourcegetWidth(), sourcegetHeight());

        canvasdrawRoundRect(rectF, radius, radius, paint);

        return result;

    }

}

```

圆角:

```

import androidcontentContext;

import androidgraphicsBitmap;

import androidgraphicsBitmapShader;

import androidgraphicsCanvas;

import androidgraphicsPaint;

import combumptechglideloadenginebitmap_recycleBitmapPool;

import combumptechglideloadresourcebitmapBitmapTransformation;

/

Created by SiHao on 2018/3/3

Glide圆形工具类

/

public class GlideCircleBitmap extends BitmapTransformation{

    public GlideCircleBitmap(Context context) {

        super(context);

    }

    // 重写该方法 返回修改后的Bitmap

    @Override

    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {

        return circleCrop(pool, toTransform);

    }

    @Override

    public String getId() {

        return getClass()getName();

    }

    private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {

        if (source == null) return null;

        // 边长取长宽最小值

        int size = Mathmin(sourcegetWidth(), sourcegetHeight());

        int x = (sourcegetWidth() - size) / 2;

        int y = (sourcegetHeight() - size) / 2;

        // TODO this could be acquired from the pool too

        Bitmap squared = BitmapcreateBitmap(source, x, y, size, size);

        Bitmap result = poolget(size, size, BitmapConfigARGB_8888);// ARGB_4444——代表4x4位ARGB位图,ARGB_8888——代表4x8位ARGB位图

        if (result == null) {

            result = BitmapcreateBitmap(size, size, BitmapConfigARGB_8888);

        }

        Canvas canvas = new Canvas(result);

        Paint paint = new Paint();

        // setShader 对图像进行渲染

        // 子类之一 BitmapShader设置Bitmap的变换  TileMode 有CLAMP (取bitmap边缘的最后一个像素进行扩展),REPEAT(水平地重复整张bitmap)

        //MIRROR(和REPEAT类似,但是每次重复的时候,将bitmap进行翻转)

        paintsetShader(new BitmapShader(squared, BitmapShaderTileModeCLAMP, BitmapShaderTileModeCLAMP));

        paintsetAntiAlias(true);// 抗锯齿

        // 半径取 size的一半

        float r = size / 2f;

        canvasdrawCircle(r, r, r, paint);

        return result;

    }

}

```

```

URL url = new URL(String类型的字符串); //将String类型的字符串转换为URL格式

holderUserImagesetImageBitmap(BitmapFactorydecodeStream(urlopenStream()));

```

```

//得到资源文件的BitMap

Bitmap image= BitmapFactorydecodeResource(getResources(),Rdrawabledog);

//创建RoundedBitmapDrawable对象

RoundedBitmapDrawable roundImg =RoundedBitmapDrawableFactorycreate(getResources(),image);

//抗锯齿

roundImgsetAntiAlias(true);

//设置圆角半径

roundImgsetCornerRadius(30);

//设置显示

imageViewsetImageDrawable(roundImg);

```

```

//如果是圆的时候,我们应该把bitmap进行剪切成正方形, 然后再设置圆角半径为正方形边长的一半即可

  Bitmap image = BitmapFactorydecodeResource(getResources(), Rdrawabledog);

  Bitmap bitmap = null;

  //将长方形裁剪成正方形

  if (imagegetWidth() == imagegetHeight()) {

      bitmap = BitmapcreateBitmap(image, imagegetWidth() / 2 - imagegetHeight() / 2, 0, imagegetHeight(), imagegetHeight());

  } else {

      bitmap = BitmapcreateBitmap(image, 0, imagegetHeight() / 2 - imagegetWidth() / 2, imagegetWidth(), imagegetWidth());

  }

  RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactorycreate(getResources(), bitmap);

  //圆角半径为正方形边长的一半

  roundedBitmapDrawablesetCornerRadius(bitmapgetWidth() / 2);

  //抗锯齿

  roundedBitmapDrawablesetAntiAlias(true);

  imageViewsetImageDrawable(roundedBitmapDrawable);

```

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/12155263.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存