Android 常用UI组件

本文深入解析了Android开发中常用的布局管理器,包括线性布局LinearLayout和相对布局RelativeLayout的详细属性及应用实例,如控件对齐、大小设定、内边距和外边距设置等,适合初学者和进阶开发者学习。

作者:Bright Xu

布局管理器

1. 线性布局 LinearLayout

  • 最常用属性

    android:idandroid:layout_margin
    android:layout_widthandroid:layout_padding
    android:layout_heightandroid:orientation
    android:background
  • android:id

    创建id

    android:id="@+id/ll_1"
    
  • 宽度和高度(android:layout_width android:layout_height)

    • match_parent

      android:layout_width="match_parent"
      android:layout_height="match_parent"
      

      匹配父控件,表示让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小

    • wrap_content

      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      

      表示让当前的控件大小能够刚好包含里面的内容,也就是由控件内容决定当前控件的大小

    • 固定宽度和高度

      android:layout_width="200dp"
      android:layout_height="200dp"
      
      • 单位通常使用dp,字体单位通常使用sp
  • android:orientation 布局方向

    • vertical 竖直方向

      android:orientation="vertical"
      
    • horizontal 水平方向

      android:orientation="horizontal"
      
    • 默认水平方向

  • android:background 背景颜色

    android:background="#ff0033"
    
  • android:layout_padding 内边距

    • android:paddingTop
    • android:paddingLeft
    • android:paddingBottom
    • android:paddingRight
  • android:layout_margin 外边距

    • android:layout_marginTop
    • android:layout_marginLeft
    • android:layout_marginBottom
    • android:layout_marginRight
  • android:layout_weight

    • 设置权重

      android:layout_weight="1"
      

      把剩余内容按权重平分

  • layout_gravity

    • 内部元素对齐方式
    • layout_gravity 是LinearLayout 子元素的特有属性。对于layout_gravity, 该属性用于设置控件相对于容器的对齐方式,可选项有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。
    • 这些可选项中不是适用于每一种布局。在垂直线性布局中,android:gravity为bottom不起作用;而水平线性布局中,android:gravity为right不起作用。本属性是android:layout_gravity属性,与 android:gravity 属同。android:gravity是LinearLayout的特有属性。android:layout_gravity是LinearLayout 子元素的特有属性,不要混淆了。

RGB网页颜色在线取色器

2. 相对布局 RelativeLayout

  • 最常用属性

    android:layout_toLeftOfandroid:layout_toStartOf
    android:layout_toRightOfandroid:layout_toEndOf
    android:layout_alignBottomandroid:layout_below
    android:layout_alignParentBottom… …
  • 对齐

    • 默认靠左上角对齐

      下面是将控件与view_2控件的下边缘对齐

      android:layout_below="@id/view_2"
      
    • android:layout_alignParentBottom 靠父控件下边缘对齐

      android:layout_alignParentBottom="true"
      
    • android:layout_alignParentRight 靠父控件右边缘对齐

      android:layout_alignParentRight="true"
      

TextView

  • 文字大小、颜色

    android:text="@string/tv_text1"
    android:textColor="#f00"
    android:textSize="24sp"
    
  • 显示不下时,使用…

    android:layout_width="100dp"
    android:maxLines="1"
    android:ellipsize="end"
    
  • 文字+icon

    android:drawableRight="@drawable/tuanzi04"
    

    在文字的右边放置了一个图片tuanzi04.png

  • 中划线

    // com.bright.helloworld.TextViewActivity.java
    package com.bright.helloworld;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class TextViewActivity extends AppCompatActivity {
    
        private TextView mTv4;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_text_view);
            mTv4 = findViewById(R.id.tv_4);
            mTv4.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);  // 中划线
            mTv4.getPaint().setAntiAlias(true);  // 去除锯齿
        }
    }
    
    
    <!-- layout/activity_text_view.xml -->
        <TextView
            android:id="@+id/tv_4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="你好,世界!!!"
            android:textColor="#f00"
            android:textSize="24sp"
            android:layout_marginTop="10dp"/>
    
  • 下划线

    方式1:

    // com.bright.helloworld.TextViewActivity.java
    package com.bright.helloworld;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class TextViewActivity extends AppCompatActivity {
    
        private TextView mTv5;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_text_view);
            mTv5 = findViewById(R.id.tv_5);
            mTv5.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);  // 下划线
        }
    }
    

    方式2:

    // com.bright.helloworld.TextViewActivity.java
    package com.bright.helloworld;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.widget.TextView;
    
    public class TextViewActivity extends AppCompatActivity {
    
        private TextView mTv6;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_text_view);
            mTv6 = findViewById(R.id.tv_6);
            mTv6.setText(Html.fromHtml("<u>你好,世界!!!</u>"));  // 下划线2
        }
    }
    
    <!-- layout/activity_text_view.xml -->
        <TextView
            android:id="@+id/tv_6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:textColor="#f00"
            android:textSize="24sp"
            android:layout_marginTop="10dp"/>
    
  • 跑马灯

    <!-- layout/activity_text_view.xml -->
        <TextView
            android:id="@+id/tv_7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="你好,世界!!!你好,世界!!!你好,世界!!!你好,世界!!!你好,世界!!!你好,世界!!!你好,世界!!!你好,世界!!!"
            android:textColor="#f00"
            android:textSize="24sp"
            android:layout_marginTop="10dp"
            android:singleLine="true"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
            android:focusable="true"
            android:focusableInTouchMode="true"/>
    
    

Button

  • 文字大小、颜色

    <!-- layout/activity_button.xml -->
    <Button
            android:id="@+id/btn_1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="按钮1"
            android:textSize="20sp"
            android:textColor="#eee"
            android:background="#999"/>
    
  • 自定义背景形状

  • 自定义按压效果

  • 点击事件

1、Android显示GIF动画 GifView GifView 是一个为了解决android中现在没有直接显示gif的view,只能通过mediaplay来显示这个问题的项目,其用法和 ImageView一样,支持gif图片 使用方法:1-把GifView.jar加入你的项目。2-在xml中配置GifView的基本属性,GifView继承自View类,和Button、ImageView一样是一个UI控件。 如: 3-在代码中配置常用属性: // 从xml中得到GifView的句柄 gf1 = (GifView) findViewById(R.id.gif1); // 设置Gif图片源 gf1.setGifImage(R.drawable.gif1); // 添加监听器 gf1.setOnClickListener(this); // 设置显示的大小,拉伸或者压缩 gf1.setShowDimension(300, 300); // 设置加载方式:先加载后显示、边加载边显示、只显示第一帧再显示 gf1.setGifImageType(GifImageType.COVER); GifView的Jar包共有四个类: GifAction.java 观察者类,监视GIF是否加载成功 GifFrame.java 里面三个成员:当前图片、延时、下张Frame的链接。 GifDecoder.java 解码线程类 GifView.java 主类,包括常用方法,如GifView构造方法、设置图片源、延迟、绘制等。 2、Calendar.v0.5.0 是 Android 平台的一个日历显示组件。 3、CWAC EndlessAdapter 是 Android 上一个可以无限往下滑进行列表数据加载的控件。 4、Android Horizontal ListView 是 Android 上一个水平滑动的 ListView 组件。 5、Android ViewBadger 视图布局。 6、滑动刷新的ListView Android PullToRefresh 为 Android 应用提供一个向下滑动即刷新列表的功能,就两个目标文件。 7、pakerfeldt-android-viewflow 是 Android 平台上一个视图切换的效果库。ViewFlow 相当于 Android UI 部件提供水平滚动的 ViewGroup,使用 Adapter 进行条目绑定。 8、Android 导航菜单 RibbonMenu 是 Android 上的一个导航菜单组件。就三个目标文件,菜单项直接在 XML 中定义,可添加文本和图标。 9、AndroidUI工具包 android-ui-utils 是一个工具包用来帮助设计和开发 Android 用户界面,包含三个单独的工具:Android Asset Studio用户界面原型模具,Android 设计预览,时常需要重复确认程序版面设计状况的 Android App 开发者,应该会爱上这个轻量级的 Java 程序:Andorid Design Preview 工具,通过 USB 连接之后,只要简单的在计算机中选取您想要显示的程序版面范围,就可将镜像结果直接显示于手机装置之上。 10、Androidui开发类库 GreenDroid 是一个Androidui开发类库,能够使你的Android开发更加简便和快捷。 11、Android滑动式菜单 SlidingMenu 是 Android 上实现类似 Facebook 和 Path 2.0 滑动式菜单的组件。 12、AsyncImageView 是 Android 上的一个异步从网络上获取图片并进行浏览的开源组件,可自动在本地进行缓存。该项目是 GreenDroid 的一部分。 13、仿Path按钮动画效果 PathButton 仿照Path应用首页左下角的Button动画效果写了个简单的Demo,由于数学不好,坐标总是和理想有出入,只是大致实现了动画效果,若果有人能把坐标算对,那么修改我的demo就能做成类似Path的那种动画效果!希望大家出点力帮着优化一下,并分享出来! 14、Android Intent开发包 OpenIntents Ope
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值