• Android


    Ctrl+Q:方法的帮助文档
    Ctrl+Alt+L:规范化代码
    Shift+F10:运行

    Log.e:表示错误信息,比如可能导致程序崩溃的异常
    Log.w:表示警告信息
    Log.i:表示一般消息
    Log.d:表示调试信息,可把程序运行时的变量值打印出来,方便跟踪调试
    Log.v:表示冗余信息

    Toast.makeText(MainActivity.this,"提示文字",Toast.LENGTH_SHORT).show();

    String desc=String.format(“您勾选了控件%d,状态为%b",buttonView.getId(),isChecked);

    天下难事必作于易,天下大事必作于细

    Android支持的像素:px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(与设备无关的显示单元)、dip(就是dp)、sp(用于设置字体大小)
    常用的有px、dp和sp
    px是手机屏幕上可显示的最小单位,与物理设备的显示屏有关
    dp与物理设备无关,只与屏幕的尺寸有关(同样尺寸的的屏幕以dp计量的分辨率是一样的)
    dp和px之间的联系取决于具体设备上的像素密度(像素密度就是DisplayMetrics里的density参数,即1dp包含多少个px)
    当density=1.0时,dp=px
    当density=1.5时,2dp=3px;
    当density=2时,1dp=2px;
    sp专门用于设置字体
    系统设置普通字体:dp和sp设置的字体一样大
    系统设置大字体:dp的文字大小不变,sp的字体却变大了


    用法:
    1.在xml布局文件中,sp用于设置文字,其余大小的地方用dp
    2.在代码中,Android用于设置大小的函数都以px为单位
    在代码中使用dp时,得先把dp值转换成px值,例
    int dip_10=Utils.dip2px(this,10L);

    Android中颜色值,由透明度和红、绿、蓝三原色定义,有八位十六进制数(FFEEDDCC,FF表示完全不透明)和六位十六进制数(xml文件中默认不透明,代码中默认透明)两种编码
    系统中已定义的颜色常量:
    BLACK:黑色
    DKGRAY:深灰
    GRAY:灰色
    LTGRAY:浅灰
    WHITE:白色
    RED:红色
    GREEN:绿色
    BLUE:蓝色
    YELLOW:黄色
    CYAN:青色
    MAGENTA:玫红
    TRANSPARENT:透明

    用法:
    1.在布局文件中设置颜色值需要“#000000”,例:android:textColor="#000000";
    布局文件中用res/values/colors.xml,可“@color/常量名”
    2.在代码中可以用“0xff00ff00”,例:setTextColor(0xff00ff00);也可以通过Color.rgb(int red,int green,int blue)和Color.argb(int alpha,int red,int green,int blue);
    代码中使用功能/res/values/colors.xml,可getResources().getColor(R.color.常量名);

    获取手机的分辨率(当前屏幕的宽和高)
    获得DisplayMetrics对象,然后从该对象中获得宽度、高度、像素密度等信息
    DisplaryMetrics对象的常用属性:
    widthPixels:以px为单位计量的宽度值
    heightPixels:以px为单位计量的高度值
    density:像素密度,即1dp包含多少个px


    用法:
    public class DisplayUtil{
    public static int getSreenWidth(Context ctx){
    WindowManager wm = (WindowManager)ctx.getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics dm = new DisplayMetrics();
    wm.getDefaultDisplay().getMetrics(dm);
    return dm.widthPixels;
    }

    public static int getSreenHeight(Context ctx){
    WindowManager wm = (WindowManager)ctx.getSystemService(Context.WINDOW_SERVICE);
    DispalyMetrics dm = new DisplaryMetrics();
    wm.getDefaultDisplay().getMetrics(dm);
    return dm.heightPixels;
    }

    public static int getSreenDensity(Context ctx){
    WindowManager wm = (WindowManager)ctx.getSystemService(Context.WINDOW_SERVICE);
    DispalyMetrics dm = new DisplaryMetrics();
    wm.getDefaultDisplay().getMetrics(dm);
    return dm.density;
    }

    View:
    是Android的基本视图,所有控件和布局都由View类直接或间接派生而来,故而View类的基本属性和方法是各空间和布局通用的。

    用法:
    1.xml文件中常用属性:
    id:该视图的编号
    layout_width:该视图的宽度,可以是dp值,也可以是match_parent、match_content(若内容超过上一级视图,该视图保持和上一级视图一样宽,超出宽度的内容进行滚动才能显示);
    layout_height:该视图的高度
    layout_margin:该视图与周围视图之间的空白距离(包括上、下、左、右)。另有layout_marginTop、layout_marginBottom、layout_marginLeft、layout_marginRight
    minWidth:该视图的最小宽度
    minHeight:该视图的最小高度
    background:该视图的背景(背景可以是颜色或图片)
    layout_gravity:制定该视图与上级视图的对齐方式,可以使用“|”把多种对齐方式拼接起来
    对齐方式:
    left:靠左对其
    right:
    top:
    bottom:
    center:
    center_horizontal:水平方向居中
    center_vertical:垂直方向居中
    padding:指定该视图边缘与内部内容之间的空白距离。另有paddingTop、paddingBottom、paddingLeft、paddingRight。
    visibility:该视图的可见类型
    visible:可见,默认值
    invisible:不可见,但占着位置
    gone:消失,不可见且不占位置

    2.代码中常用设置:
    setMinimumWidth:设置该视图的最小宽度
    setMiniumHeight:设置该视图的最小高度
    setBackgroundColor:设置该视图的背景颜色
    setBackgroundResource:设置该视图的背景
    setBackgroundDrawable:设置该视图的背景图片
    setPadding:设置该视图边缘与内部内容之间的空白距离
    setVisibility:设置该视图的可视类型
    *setLayoutParams:设置该视图的布局参数

    视图组ViewGroup:
    用法:
    addView:往布局中添加一个视图
    removeView:从布局中删除制定视图
    removeAllViews:删除该布局下的所有视图

    LinearLayout:线性布局
    继承了View和ViewGroup类的所有属性和方法,还有其特有的xml属性


    用法:
    1.在xml文件中
    orientation:制定线性布局的方向(horizontal表示水平布局,vertical表示垂直布局,默认是水平布局)
    gravity:指定布局内部视图与本线性布局的对齐方式,取值同layout_gravity
    layout_weight:指定当前视图的宽或高占上级线性布局的权重
    layout_weight并非在当前LinearLayout节点中设置,而是在下级视图的节点中设置

    用法:
    layout_weigth是指定的是当前视图在宽度上的权重,layout_width就要同时设置为0dp
    2.在代码中
    setOrientation:(LinearLayout.HORIZONTAL表示水平方向...)
    setGravity:

    ScrollView:滚动视图
    与线性布局类似,滚动视图也分为垂直方向和水平方向两类
    其中,垂直滚动的视图名为ScrollView,水平滚动的视图名为HorizontalScrollView。

    垂直滚动时:layout_width要设置为math_parent,layout_height要设置为wrap_content
    水平滚动时:layout_width要设置为wrap_content,layout_hegith要设置为match_parent

    滚动视图下面有且只能挂一个布局节点

    有时ScrollView的实际内容不够,又想让它充满屏幕,设置layout_height为match_parent,结果还是不会充满,正确的做法是再增加一行fillViewport属性设置,例:android:fillViewport="true"


    文本显示视图:TextView
    常用的属性:
    text:设置文本内容
    textColor:设置文本颜色
    textSize:设置文本大小
    textAppearance:设置文本风格,风格定义在res/styles.xml
    gravity:设置文本的对齐方式

    跑马灯用法:
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:ellipsize="marquee" //跑马灯

    Button:

    1.单击监听用法:
    class MyOnClickListener implements View.OnClickListener{
    @Override
    public void onClick(View v){
    if(v.getId()==R.id.btn_click){
    Toast.makeText(ClickActivity.this,"您单击了控件:"+((TextView)v).getText(),Toast.LENGTH_SHORT).show();
    }
    }
    }

    btn.setOnClickListener(new MyOnClickListener());
    2.
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    public void onClick(View v){
    if(v.getId()=R.id.btn_test)
    Toast.makeText(MainActivity.this,"按下按钮",Toast.LENGTH_SHORT).show();
    }

    btn.setOnClickListener(this);

    Button文字周围放置图片
    使用TextView就是实现,那么基于TextView的Button自然能够实现

    属性:
    drawableTop:指定文本上方的图形
    drawableBottom:指定文本下方的图形
    drawableLeft:指定文本左边的图形
    drawableRight:指定文本右边的图形
    drawablePadding:指定图形与文本的间距

    代码中实现:
    setCompoundDrawables:设置文本周围的图形。可分别设置左边、上边、右边、下边的图形
    setCompoundDrawablePadding:设置图形与文本的间距

    用法:
    //onCreate()函数中的代码片段
    drawable=getResouces().getDrawable(R.mipmap.ic_launcher);
    drawable.setBounds(0,0,drawable.getMinimumWidth(),drawable.getMinimumHeight()); //必须设置图片大小,否则不显示图片

    //点击事件中可以添加的代码
    btn_test.setCompoundDrawables(drawable,null,null,null);

    ImageView: 图像显示控件

    属性:
    scaleType:指定图形的拉伸类型,默认是fitCenter
    fitXY:拉伸图片使其正好填满视图 (填满ImageView)
    fitStart:拉伸图片使其位于视图上部
    fitCenter:拉伸图片使其位于视图的中部 (图片被拉伸但未超出控件范围)
    fitEnd:拉伸图片使其位于视图的下部
    center:保持图片原尺寸,并使其位于视图中间 (原图显示,图片没有拉伸)
    centerCrop:拉伸图片使其充满视图,并位于视图中间 (图片被拉伸且已超出控件范围)
    centerInside:使图片位于视图中间(只压不拉)。当图片尺寸大于视图时,centerInside等同于fitCenter;当图片尺寸小于视图时,centerInside等同于center
    src:指定图形来源。
    注意视图不按scaleType指定的方式拉伸,背景默认以fitXY方式拉伸

    代码中用法:

    setScaleType:
    setImageDrawable:设置图形的Drawable对象
    setImageResource:设置图形的资源id
    setImageBitmap:设置图形的位图对象

    使用截图功能(这些方法都继承自View类)

    setDrawingCacheEnabled:设置绘图缓存的可用状态。true表示打开,false表示关闭
    isDrawingCacheEnabled:判断该控件的绘图缓存是否可用
    setDrawingCacheQuality:设置绘图缓存的质量
    getDrawingCache:获取该控件的绘图缓存结果,返回值为Bitmap类型
    setDrawingCacheBackgroundColor:设置绘图缓存的背景颜色。
    提供该方法是因为绘图缓存默认背景色是黑色,如果不提前设置缓存的背景色,截图的结果就是黑乎乎一片,所以需要将背景色设置为默认颜色(通常是白色)

    步骤:
    1. setDrawingCacheEnabled(true); //先开启绘图缓存,之后变更的界面才会记录到缓存中;如果先变更界面再开启绘图缓存,缓存里就是空
    2. getDrawingCache(); //获取绘图缓存图像数据
    3. setImageBitmap(bitmap);
    4. setDrawingCacheEnabled(false); //延迟若干毫秒后调用,关闭绘图缓存
    该方法写在延时函数中,如果接下来还要截图就再开启绘图缓存

    延时函数:
    private Handler mHandler = new Handler();
    private Runnable mResetCache = new Runnable() {
    @Override
    public void run() {
    iv_test.setDrawingCacheEnabled(false);
    }
    };

    mHandler.postDelayed(mResetCache,200); //主程序中调用该函数延时

    ImageButton图像按钮:
    派生自ImageView,而不是派生自Button,只是ImageView有个默认的按钮外观
    只能显示图形不能显示文本
    ImageButton上的图像可按比例伸拉,而Button上的大图会拉伸变形(因为背景图无法按比例拉伸)
    Button能在背景显示一张图形,而ImageButton可分别在前景和背景显示两张图形,实现图片叠加效果

    应用场景:
    输入法打不出来的字符和以特殊字体显示的字符串,适合先切图再用ImageButton显示


    项目目录中的Drawable文件夹:

    导入图片:
    1.直接复制到该项目目录中
    2.通过批量drawable插件Android Postfix Completion生成并导入各分辨率的图片

    Android把素有显示的图形都抽象为Drawable(可绘制的)
    这里的图形不止于图片,还包括色块、画板、背景等

    drawable-ldpi:存放低分辨率的图片(如240*320)
    drawable-mdpi:存放中等分辨率的图片(如320*480),这样的之智能手机已经很少了
    drawable-hdpi:存放高分辨率的图片(如480*800),一般对应4寸~4.5寸的手机,但也不绝对
    drawable-xhdpi:高分辨率的图片(如720*1280),一般对应5~5.5寸的手机
    drawable-xxhdpi:超高分辨率的图片(如1080*1920),一般对应6~6.5寸的手机
    drawable-xxxhdpi:存放超高分辨率的图片(如1440*2560),一般对应7寸以上的平板电脑

    基本上,分辨率加大一级,宽度和高度就要加大二分之一或三分之一的像素。
    如果各目录中存在同名图片,Android会根据手机的分辨率适配对应文件夹的图片

    代码中用法:

    1.使用setBackgroundResource和setImageResource方法,直接参数指定R.drawable.*
    2.使用setBackgroundDrawable、setImageDrawable和setCompoundDrawables等方法,参数是Drawable对象
    Drawable drawable=getResources().getDrawable(R.drawable.apple);

    StateListDrawable: 状态图形,(部件不同状态的控制)
    该类是Drawable的一个子类,该子类在xml文件中定义了不同状态时呈现图形列表
    不仅用于Button控件,而且可以用于其他拥有不同状态的控件

    状态类型属性:
    state_pressed:是否按下(true、false) 常用于Button
    state_checked:是否勾选 常用于单选框RadioButton、复选框CheckBox
    state_focused:是否获取焦点 常用于文本编辑框EditText
    state_selected:是否选中 各控件均可

    //background的属性可以设置为如下代码
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/check_choose"/>
    <item android:drawable="@drawable/check_unchoose"/>

    </selector>

    Shape:形状图形
    定义文件以shape元素为根节点。根节点下定义了6个节点:corners(圆角)、gradien(渐变)、padding(间隔)、size(尺寸)、solid(填充)、stroke(描边)
    实际开发常用的有3个节点:corners、solid、stroke。
    shape节点的常用属性:
    rectangle:矩形,默认值
    oval:椭圆,此时corners节点会失效
    line:直线,此时必须设置stroke节点,不然会报错
    ring:圆环
    corners时shape (若无corners节点,则表示么有圆角)
    bottomLeftRadius:像素类型,左下圆角的半径
    bottomRightRadius:右下圆角的半径
    topLeftRadius:左上圆角的半径
    topRightRadius:右上圆角的半径
    radius:圆角半径(若有上面4个的定义,则不需要radius定义)
    gradien: (描述形状内部的颜色渐变定义,若无该节点,表示没有渐变效果)
    angle:整型,渐变的起始角度。为0时表示是时钟的9点位置,值增大表示往逆时针方向旋转。例如:90表6点位置,180表3点位置
    type:渐变类型
    lincar:线性渐变,默认值
    radial:放射渐变,起始颜色即使圆心颜色
    sweep:滚动渐变,即一个线段以某个端点为圆心做360度旋转
    centerX:浮点型,圆心的x坐标。当android:type=“linear"时不可用
    centerY:浮点型,圆心的y坐标。当android:type=“linear"时不可用
    gradientRadius:整型,渐变的半径。当android:type="radial"时才需要设置该属性
    centerColor:颜色类型,渐变的中间颜色
    startColor:颜色类型,渐变的起始颜色
    endColor:颜色类型,渐变的终止颜色
    useLevel:布尔类型,设置为true无渐变色、false有渐变色
    padding:描述形状图形与周围视图的间隔大小。若无该节点,则表示四周不设间隔
    bottom:像素类型,与下边的间隔
    left:像素类型,与坐标的间隔
    right:像素类型,与右边的间隔
    top;像素类型,与上边的间隔
    size:用来表述形状图形的尺寸大小(宽度和高度)若没有该节点,则表示宽高自适应
    height:像素类型,图形高度
    width:像素类型,图形宽度
    solid:描述形状图形内部的填充色彩,若没有该节点,表示无填充颜色
    color:颜色类型,内部填充的颜色
    stroke:描述形状图形四周边线的规格定义,若无该节点,表示不存在描边
    color:颜色类型,描边的颜色
    dashGap:像素类型,每段虚线之间的间隔
    dashWidth:像素类型,每段虚线的宽度
    width:像素类型,描边的厚度。若dashGap和dashWidth有一个值为0,则描边为实线。

    xml文件用法:
    <shape xmls:android="http://schemas.android.com/apk/res/androd">
    <solid android:color=#ffdd66"/>
    <stroke
    android:width="1dp"
    android:color="#ffaabbcc"/>
    <corners
    android:bottomLeftRadius="10dp"
    android:bottomLeftRadius="10dp"
    android:topLeftRadius="10dp"
    android:topRightRadius="10dp"/>
    </shape>

    在界面中添加一个水平分割线:

    1.在TextView控件中来内需填入许多横线或下划线
    2.让美工做一个横线的切图,然后ImageView控件塞进横线图
    3.用Shape,根节点Shape属性设置为line
    4.在布局文件中添加View控件,高度设置为1dp,背景颜色设置为线条颜色 (最简单)

    九宫格图片
    实现原理与shape类似,即拉伸图形时,只对内部进行拉伸,不对边缘做拉伸操作
    避免边缘被拉宽、拉模糊的问题

    使用到drawable9patch工具

    计算器项目:
    为了减少冗余代码,可将相同的样式定义写在values目录下的style.xml文件中,然后再布局文件节点添加styl'e="@style/btn_cal”这样的属性
    用法:
    <style name="btn_cal">
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:layout_weight">1</item>
    <item name="android:gravity">center</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:textSize">30sp</item>
    <item name=android:background">@drawable/btn_nine_selector</item>
    </style>

    相对布局RelativeLayout:
    下级视图的位置是相对位置,如果不设定下级视图的参照物,那么下级视图默认显示再RelativeLayout内部的左上角
    确定视图位置的参照物分两种:
    1.与该视图自身平级的视图
    2.该视图的上级视图

    属性:
    layout_toLeftOf:当前视图在指定视图的左边
    layout_toRightOf:当前视图在指定视图的右边
    layout_above:当前视图在指定视图的上方
    layout_below:当前视图在指定视图的下方
    layout_alignLeft:当前视图在指定视图的左侧对齐
    layout_alignRight:当前视图在指定视图的右侧对齐
    layout_alignTop:当前视图与指定视图的顶部对齐
    layout_alignBottom:当前视图与指定视图的底部对齐
    		layout_centerInParent:当前视图在      上级视图的中间
    layout_centerHorizontal:当前视图 在上级视图的水平方向居中 (屏幕最上方中间)
    layout_centerVertical: 在上级视图的垂直方向居中 (屏幕最左方中间)
    layout_alignParentLeft:当前视图 与上级视图的左侧对齐 (屏幕左上角)
    layout_alignParentRight:
    layout_alignParentTop:
    layout_alignParentBottom: 与上级视图的底侧对齐 (屏幕左下角)

    在代码中动态添加视图
    用到的是RelativeLayout.LayoutParams的addRule方法,该方法第一个参数表示相对位置类型,第二个参数表示参照物视图的id

    框架视图FrameLayout:
    其下级视图无法指定所处的位置,只能统统从上级FrameLayout的左上角开始添加,并且后面添加的子视图会把之前的子视图覆盖掉
    场景:
    一般需要重叠显示的场景,比如绘图、游戏界面等

    属性:
    foreground:指定框架布局的前景图像。该图像在框架内部永远处于最顶层,不会被框架内的其他视图覆盖
    foregroundGravity:指定前景图像的对齐方式。该属性的取值同gravity

    绝对布局AbsoluteLayout:
    表格布局TableLayout:

    复选框CheckBox:
    CompoundButton类是抽象的符合按钮,因为是抽象的,所以不能直接使用。
    实际开发中用到是CompoundButton类的几个派生类,主要有复选框CheckBox、单选按钮RadioButton以及开关按钮Witch

    CompoundButton类在布局文件中的属性:
    checked:按钮的勾选状态,true表示勾选,false表示未勾选。默认未勾选
    button:指定左侧勾选图标的图形。如果不指定就使用系统的默认图标。

    CompoundButton在代码中可使用下列4中方法进行设置
    setChecked:设置按钮的勾选状态
    setButtonDrawable:设置左侧勾选图标的图形
    setOnCheckedChangeListener:设置勾选状态变化的监听器
    isChecked:判断按钮是否勾选


    复选框CheckBox通过setOnCheckedChangeListener方法设置勾选监听器,对应的监听器要实现接口CompoundButton.OnCheckedChangeListener。

    开关按钮Switch:
    方方正正有点土

    Android从4.1.2版本开始支持该控件。
    起始Switch是一个高级版本的CheckBox,在选中与取消选中时可展现的界面元素比CheckBox丰富

    属性:
    textOn:设置右侧开始时的文本
    textOff:设置左侧关闭时的文本
    switchPadding:设置左右两个开关按钮之间的距离
    thumbTextPadding:设置文本左右两边的距离。如果设置了该属性switchPadding属性就会失效
    thumb:设置开关轨道的背景
    track:设置开关标识的图标

    Android是实现类似于ios的开关按钮
    主要思路:
    1.借助状态列表图形StateListDrawable,首先定义一个状态列表
    //background属性可以设置为下面的代码 (不直接修改button的属性是因为其属性是由限制的,无论多大的图片,都只显示一个小小的图标)
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/switch_on"/>
    <item android:drawable="@drawable/switch_off"/>
    </selector>
    2.button属性要先设置为@null

    单选按钮RadioButton:

    只能选择一个,不能多选,按钮范围可以通过RadioGroup容器来确定
    RadioGroup实质上是个布局,同一组RadioButton都要放在同一个RadioGroup节点下
    RadioGroup其下可挂其他子部件,如TextView、ImageView等
    RadioGroup属性:
    orientation:指定下级控件的排列方式

    RadioGroup常用的方法:

    setCheckedId:选中指定资源编号的单选按钮
    getCheckedRadioButtonId:获取选中状态单选按钮的资源编码
    setOnCheckedChangeListener:设置单选按钮勾选变化的监听器

    单选按钮的选中事件一般不由RadioButton处理,而由RadioGroup相应。
    选中事件在实现时,首先要写一个选中监听器实现接口RadioGroup.OnCheckChangeListener,然后调用RadioGroup对象的setOnCheckedChangeListener

    RadioButton经常会更换按钮图标
    如果通过button属性变更图标,那么图标与文字就会挨的很近
    为了拉开图标与文字之间的距离,得换成drawableLeft属性展示新图标(不要忘了把button属性改为@null)此时再设置drawablePadding即可只当间隔距离

    图标设置方式:
    1.button:用于图标大小要求不高,间隔要求也不高
    2.background:用于能够较大空间显示图标的场合
    3.drawableLeft:对图标和文件之间的间隔有要求的场合

    下拉框Spinner:
    属性:
    spinnerMode:设置为dropdown,当前下拉框的正下方展示列表
    spinnerMode:设置为dialog,在页面中部以对话框形式展示列表

    代码中调用的方法:
    setPrompt:设置标题文字
    setAdapter:设置下拉列表的适配器。适配器可选择ArrayAdapter或SimpleAdapter
    setSelection:设置当前选中哪项。注意此方法要setAdapter方法后调用
    setOnItemSelectedListener:设置下拉列表的选中监听器,该监听器要实现接口OnItemSelectedListener


    数组适配器ArrayAdapter:

    //spinner_item.xml
    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textSize="20sp"
    android:paddingLeft="20dp">

    </TextView>

    //item_dropdown.xml
    设置弹出窗口的布局方式


    //使用
    public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    Spinner spinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    spinner= findViewById(R.id.spinner_id);
    spinner.setPrompt("选项");
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.spinner_item,startArray);
    adapter.setDropDownViewResouce(R.layout.item_dropdown); //这个用来明确弹出窗口的布局
    spinner.setAdapter(adapter);
    spinner.setSelection(0);
    spinner.setOnItemSelectedListener(this);
    }
    private String[] startArray={"火星","水星","木星"};
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    Toast.makeText(MainActivity.this,"您选择的是"+startArray[position],Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    }
    }

    SimpleAdapter:


    文本编辑框EditText:
    没有自动获取文本编辑框长度的方法,但是可以通过
    public static int getMaxLength(EditText et){
    int length=0;
    try{
    inputFilter[] inputFilters=et.getFilters();
    for(InputFilter filter:inputFilters){
    Class<?> c = filter.getClass();
    if(c.getName().equals("android.text.InputFilter$LengthFilter")){
    Field[] f = c.getDeclaredFields();
    for(Field field: f){
    if(field.getName().equals("mMax")){
    field.setAccessible(true);
    length = (Integer)field.get(filter);
    }
    }
    }
    }
    }catch(Exception e){
    e.printStackTrace();
    }
    return length;
    }

    属性:
    inputType:指定输入的文本类型,指定多个类型可以用“|”
    text:文本
    textPassword:文本密码,显示时用“*”替代
    number:整型数
    numberSigned:带符号的数字,允许在开头带负号“-”
    numberDecimal:带小数点的数字
    numberPassword:数字密码,显示时用*代替
    datetime:时间日期格式,除了数字外,还允许输入横线、斜杠、空格、冒号
    date:日期格式,除了数字外,还允许输入横线-和斜杠/
    time:时间格式,除了数字外,还允许输入冒号:
    maxLength:指定文本允许输入的最大长度
    hint:指定提示文本的内容
    textColorHint:指定提示文本的颜色

    //更换编辑框的光标
    cursorVisible:指定光标是否可见
    textCursorDrawable,指定光标的图像

    //更换边框
    background:
    @null:隐藏边框

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable=@drawable/shape_edit_focus"/>
    <item android:drawable="@drawable/shape_edit_normal“/>
    </selector>

    //自动隐藏输入法
    常用的做法时给该页面的根节点设置focusable和focusableInTouchMode属性,通过将这两个属性设置为true可强制让根节点获得焦点,避免输入法自动弹出


    编辑框文本达到指定长度时,自动关闭输入法
    1.获得允许输入的最大长度,当输入长度等于最大长度时,即触发关闭软键盘
    获取输入的最大长度的函数见上
    监控当前已输入的文本长度用到文本监听器接口TextWatcher,其包含三个方法:
    beforeTextChanged:在文本改变之前触发
    onTextChanged:在文本改变过程中触发
    afterTextChanged:在文本改变之后触发
    输入法通过系统服务INPUT_METHOD_SERVICE管理,所以隐藏输入法也要通过该服务实现
    方法1:
    public static void hideAllInputMethod(Activity act){
    InputMethodManager imm=(InputMethodManager)act.getSystemService(Context.INPUT_METHOD_SERVICE);
    if(imm.isActive() == true){
    imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
    }
    }
    方法2:
    public static void hideOneInputMethod(Activity act,View v){
    InputMethodManager imm = (InputMethodManager)act.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(v.getWindowToken(),0);
    }

    //输入回车符自动跳转(按下回车后,自动跳到下一个编辑框)
    用到了文本监听器接口TextWatcher,主要监听用户是否输入回车符


    private class jumpTextWatcher implements TextWatcher{
    private EditText mThisView = null;
    private View mNextView = null;

    public JumpTextWatcher(EditText vThis,View vNext){
    super();
    mThisView = vThis;
    if(vNext!=null){
    mNextView = vNext;
    }
    }
    @文本改变前
    @文本发生改变

    @Override
    public void afterTextChanged(Editable s){
    String str=s.toString;
    if(str.indexOf(" ")>=0||str.indexOf(" ")>=0){ //发现回车符或换行符
    mThisView.setText(str.replace(" ","").replace(" ","")); //去掉回车符或换行符
    if(mNextView!=null){
    mNextView.requestFocus(); //让下一个视图获得焦点,即将光标移动到下一个视图
    if(mNextView instanceof EditText){
    EditText et = (EditText)mNextView;
    //让光标自动移到编辑框内部的文本末尾
    //方式一、直接调用EditText的setSelection方法
    et.setSelection(et.getText().length());
    //方式二、调用Selection类的setSelection方法
    //Editable edit=et.getText();
    //Selection.setSelection(edit,edit.length());
    }
    }
    }
    }
    }


    自动完成编辑框AutoCompleteTextView:
    实现原理:
    EditText结合监听器TextWatcher与下拉列表Spinner,一旦监控到EditText发生改变,就会自动弹出适配好的文字下拉列表
    属性:
    completionHint:设置下拉列表底部的提示文字
    completionThreshold:设置至少输入多少个字符才会显示提示
    dropDownHorizontalOffset:设置下拉列表与文本框之间的水平偏移
    dropDownVerticalOffset:设置下拉列表与文本框之间的垂直偏移
    dropDownHeight:设置下拉列表的高度
    dropDownWidth:设置下拉列表的宽度

    Android四大组件之一,Activity:
    一个Activity代表一个页面,Activity的onCreate方法是页面的入口函数
    调用startActivity方法可以跳转到下一个页面

    1.生命周期
    onCreate:创建页面。把页面上的各个元素加载到内存中
    onStart:开始页面。把页面显示在屏幕上
    onResume:恢复页面。让页面在屏幕上活动起来,如开启动画、开始任务等
    onPause:暂停页面。让页面在屏幕上的动作停下来
    onStop:停止页面。把页面从屏幕上撤下来
    onDestroy:销毁页面。把页面从内存中清除掉
    onRestart:重启页面。重新加载内存中的页面数据

    打开页面
    onCreate--onStart--onResume
    跳转页面
    上一个页面onPause--下一个页面onCreate--onStart--onResume--上一个页面onStop
    从这个页面返回的奥上一个页面
    下一个页面onPause--上一个页面onRestart--onStart--onResume--下一个页面onStop--onDestroy

    横屏、竖屏切换
    进行切换时都是原屏幕的页面从onPause到onStop再到onDestroy一路销毁,然后新屏幕的页面从onCreate到onStart再到onResume一路创建而来

    2.组成部分
    3.工作原理
    4.页面间的消息传递
  • 相关阅读:
    关于JSONP
    使用stylelint对CSS/Sass做代码审查
    关于input的file框onchange事件触发一次失效的新的解决方法
    HTML5 之 FileReader(图片上传)
    document.domain
    window.hostory(浏览器的历史记录)
    事件DOMContentLoaded和load的区别
    JavaScript中---作用域
    关于repaint(重绘)和reflow( 回流)
    bootstrap兼容性问题
  • 原文地址:https://www.cnblogs.com/xiaoshi-com/p/9434077.html
Copyright © 2020-2023  润新知