Android自定义控件单位尺寸实现代码

一、自定义控件的单位和尺寸

1.一般在PC上会使用px(像素)和pt(磅)作为单位,但是在手机上由于不断地会更新手机屏幕的分辨率,因此使用这两个单位不再那么合适。可能在一部低分辨率手机上,一个控件占据整块屏幕,而在高分辨率的手机屏幕上连一半都占不到。我们先新建一个工程UISizeTest,然后修改activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >
 <Button
   android:id="@+id/button"
   android:layout_width="200px"
   android:layout_height="wrap_content"
   android:text="Button"
   />
</RelativeLayout>

既然pt和px不好用,我们可以使用dp和sp来进行设计

二、dp和sp

1.dp是密度无关像素的意思,sp是可伸缩像素的意思,dpi就是屏幕密度,也就是比如一个2*3英寸的屏幕分辨率为320*480像素,那么屏幕的密度就是160dip,代表屏幕每英寸所含有的像素数。

2.使用代码来测量手机的屏幕密度值

package com.example.uisizetest;
import android.app.Activity;
import android.util.Log;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends Activity {
	 @Override
	 protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		float xdpi = getResources().getDisplayMetrics().xdpi;
		float ydpi = getResources().getDisplayMetrics().ydpi;
		Log.d("MainActivity","xdpi is "+xdpi);
		Log.d("MainActivity","ydpi is "+ydpi);
	}
}

如图:在Logcat中可以看到日志记录的dpi值。

根据Android的规定在160dpi的屏幕上,1dp就等于1px,而在320dpi的屏幕上1dp就等于2px,这样就能保证控件在不用密度的屏幕上显示的比例是一致的。

总结:在Android开发中,如果控件需要指定一个固定值,则使用dp来作为单位,如果指定文字的大小那么使用sp作为单位。

三、源码:

项目地址

https://github.com/ruigege66/Android/tree/master/UISizeTest

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android自定义控件实现时钟效果

    在学习安卓群英传自定义控件章节的时候,有一个例子是绘制时钟,在实现了书上的例子后就想看这个时钟能不能动起来. 这里选择延迟一秒发送消息重绘view来实现的动画,对外提供了开启时钟,关闭时钟的方法,当activity执行onResume方法的时候,执行startClock()方法,当移除view或activity执行onStop方法的时候可以执行stopClock()方法. 首先根据view的宽高来确定圆心的位置,并画出一个圆.再通过view高度的一半减去圆的半径,确定刻度的起始位置,选择刻度的长

  • Android自定义View实现点赞控件

    本文实例为大家分享了Android点赞控件的具体代码,供大家参考,具体内容如下 预览效果 目录 图片类:LikeImageView 文字类:LikeCharTextView 整合类:LikeView.java 自定义属性:attrs.xml 代码 LikeCharTextView public class LikeCharTextView extends View { public static final int DEFAULT_TEXTCOLOR = Color.BLACK; public

  • android自定义圆形倒计时显示控件

    本文实例为大家分享了android自定义圆形倒计时显示控件的具体代码,供大家参考,具体内容如下 先上效果图 - 倒计时结束 代码块 attr.xml 控件需要用到的属性: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CountDownView"> <!--颜色--> <attr name

  • Android自定义控件仿iOS滑块SwitchButton

    SwitchButton可以点击的时候切换状态,类似CheckBox 在拖动的时候,也可以根据拖动的距离判断是否切换状态,类似ToggleButton 因此要区别出单击事件和拖动事件 实现效果如图所示: 自定义的SwitchButton如下: public class SwitchButton extends View implements View.OnTouchListener { private Bitmap bg_on, bg_off, slipper_btn; /** * 按下时的x和

  • Android自定义控件仿ios下拉回弹效果

    网上有很多类似的文章,大多数还是继承listview来实现(主要是listview.addHeaderView()和listview.addFooterView在listview的首尾添加view,也可以用上面的两个listview自带函数实现下拉刷新的功能,在这里不准备介绍,有兴趣的朋友可以去自己试试). 在本文主要是给android的线性布局(相对布局.帧布局)加上下拉或者上拉回弹得效果.在ios中我们经常能看到,在一个页面中即使是只有一个控件,这一个控件只占整个页面的1/10不到,但是当我

  • android自定义WaveView水波纹控件

    本文实例为大家分享了android自定义WaveView水波纹控件的使用方法,供大家参考,具体内容如下 Github Repository and libaray WaveView水波纹控件 首先看下演示demo demo中可以看到不同高度,不同速度,不同幅度的水波纹:你可以通过view的参数直接控制view的表现形式. 引入你的工程 在项目的根目录下的build.gradle文件中添加如下代码: allprojects { repositories { ... maven { url 'htt

  • Android自定义控件实现折线图

    本文实例实现一个如下图所示的Android折线图,供大家参考,具体内容如下 首先是控件绘图区域的划分,控件左边取一小部分(控件总宽度的八分之一)绘制表头,右边剩余的部分绘制表格 确定表格的行列数,首先绘制一个三行八列的网格,设置好行列的坐标后开始绘制 /*绘制三条横线*/ for(int i=0;i<3;i++){ canvas.drawLine(textWide, mLineYs[i], totalWidth, mLineYs[i], mPaintLine); } /*绘制八条竖线*/ for

  • Android自定义圆环倒计时控件

    本文实例为大家分享了Android自定义圆环倒计时控件的具体代码,供大家参考,具体内容如下 先来一张最终效果图: 主要思路: 在画渐变色圆环的时候,设置一个属性动画,根据属性动画的执行时长,来作为倒计时的时长.监听属性动画的进度,来达到 倒计时的目的. 二话不说,直接贴代码.具体实现思路都在注释上. 自定义属性: <declare-styleable name="CountDownProgressBar"> <attr name="countDown_cir

  • Android自定义控件单位尺寸实现代码

    一.自定义控件的单位和尺寸 1.一般在PC上会使用px(像素)和pt(磅)作为单位,但是在手机上由于不断地会更新手机屏幕的分辨率,因此使用这两个单位不再那么合适.可能在一部低分辨率手机上,一个控件占据整块屏幕,而在高分辨率的手机屏幕上连一半都占不到.我们先新建一个工程UISizeTest,然后修改activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  • Android 获取屏幕尺寸实例代码

    Android 获取屏幕尺寸实例代码 实现代码: /** * <supports-screens * android:smallScreens="true" * android:normalScreens="true" * android:largeScreens="true" * android:resizeable="true" * android:anyDensity="true" />

  • Android获取屏幕尺寸大小代码实例

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取屏幕的长度和宽度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); i

  • Android自定义控件EditText使用详解

    本文实例为大家分享了Android自定义控件EditText的具体代码,供大家参考,具体内容如下 自定义控件分三种: 1. 自绘控件 2. 组合控件 3. 继承控件 代码已上传到 github 以后的自定义控件就都放这个仓库 需求 这里由于项目的需要实现一个自定义EditText,主要实现的为两点,一个是工具图标toolIcon,例如点击清除EditText内容.一个为EditText左边的提示图标hintIcon, 例如输入账号密码时前面的图标. 为了让这个控件的拓展性更高,设置了两个点击事件

  • android自定义控件创建翻页接口详细代码

    本文分享的这个类的目的是为在看书翻页时,需要进行的动作提供接口,利用android自定义控件创建翻页接口,具体内容如下 BookPage.java package com.horse.util; import java.text.DecimalFormat; import java.util.Vector; import com.horse.bean.Chapter; import android.graphics.Bitmap; import android.graphics.Canvas;

  • Android自定义控件下拉刷新实例代码

    实现效果: 图片素材: --> 首先, 写先下拉刷新时的刷新布局 pull_to_refresh.xml: <resources> <string name="app_name">PullToRefreshTest</string> <string name="pull_to_refresh">下拉可以刷新</string> <string name="release_to_refre

  • Android自定义控件之翻转按钮的示例代码

    本文介绍了Android自定义控件之翻转按钮的示例代码,分享给大家,具体如下: 先看一下效果 一.先定义控件的基本结构 这里我们定义一个容器,所以是在ViewGroup的基础上扩展. 简单起见,直接使用扩展自ViewGroup的LinearLayout,并将我们的控件扩展自LinearLayout. 1.按钮的基本布局如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr

  • Android自定义控件之可拖动控制的圆环控制条实例代码

    前几天收到这么一个需求,本来以为挺简单的,没想到最后发现实现起来还是有点小麻烦的,在这里小小的总结一下. 先看看下面这张需求的样图: 然后在看一下最终实现的效果图,可能是gif录制软件的问题,有一些浮影,忽略就好了: 首先要分析一下最核心的地方,如何获取到滑动距离对应的弧长,看图: p1是手指按下的点,很明显要想知道当前进度弧边的值,就是要求出角d的值. 以p为圆心点,atan(b)=Math.atan((-p.y)/(-p.x)); 所以角d的值为:Math.toDegrees(atan);

  • Android自定义控件之自定义属性(二)

    前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控件基本原理详解(一)这篇文章. 需求产生背景: 为何要引入自定义属性?当Android提供的原生属性不能满足实际的需求的时候,比如我们需要自定义圆形百分比半径大小.圆形背景.圆形显示的位置.圆形进度的背景等等.这个时候就需要我们自定义属性了. 自定义属性步骤: 1.)在res/values文件下添加

  • Android 曲线图的绘制示例代码

    本文介绍了Android 曲线图的绘制示例代码,分享给大家,具体如下: 效果展示 效果展示.gif 使用方式 // 初始化数据表格相关 with(mTableView) { // 配置坐标系 setupCoordinator("日", "人", /*这里是横坐标的值*/0f, 5f, 10f, 15f, 20f, 25f, 30f) // 添加曲线, 确保纵坐标的数值位数相等 addWave(ContextCompat.getColor(this@MainActiv

随机推荐