您的位置:首页 > 移动开发 > Android开发

Android开发小技巧整理(持续更新)

2015-08-03 15:52 513 查看

老话说的好,好记性不如烂笔头,东西做久很容易会忘掉,没有一个系统的整理,真是资源的浪费,想要成为技术大牛就要不停的积累吸收、分享、传递。

1.静态代码块和静态方法的区别

1)静态代码块:静态代码块是自动执行的,而静态方法是被调用的时候才执行的

当一个类需要在被载入时就执行一段程序,这样可以使用静态程序块。

2)静态方法:如果我们在程序编写的时候需要一个不实例化对象就可以调用的方法,我们就可以使用静态方法,具体实现是在方法前面加上static

3)在使用静态方法的时候需要注意一下几个方面:

在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,

需要先创建类 的实例对象后才可使用,而静态方法在使用前不用创建任何对象。(备注:静态变量是属于整个类的变量而不是属于某个对象的)

静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。

2.android:layout_gravity="bottom"不起作用问题

对于 LinearLayout(父View)

当 android:orientation="vertical"时,只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left,right,center_horizontal是生效的。

当 android:orientation="horizontal"时,只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top,bottom,center_vertical是生效的。

3.Android中GridView、ListView的getChildAt方法返回null (通过getChildAt方法取得AdapterView中第n个Item)

ListView或GridView的方法:getChildAt(int index)

一开始以为传入一个绝对的position(就是adapter的第几个item)就可以返回该position的View。但是GridView和ListView对View采用回收机制,简单的说明一下就是:如果屏幕最多可以显示n个子View,那么内存中其实只有n个View,当我们在滚动时,第(n+1)个View复用第1个View,依次类推。所以在GridView和ListView中,getChildAt
( int position ) 方法中position指的是当前可见区域的第几个元素。

//如果你要获得GridView的第n个View,那么position就是index减去第一个可见View的位置
int firstVisablePosition = ((ListView) view).getFirstVisiblePosition();
View itemView = ((ListView) view).getChildAt(index - firstVisablePosition);


4.ListView使用

1)ListView及其他继承自AdapterView的类都有一个简便的处理这种情况的方法:setEmptyView(View)

当ListView的Adapter为空或者Adapter的isEmpty()方法返回true的时候,它将会把设置的emptyview绘制出来。

2)drawSelectorOnTop属性
android:drawSelectorOnTop="true" 点击某一条记录,颜色会显示在最上面,记录上的文字被遮住,所以点击文字不放,文字就看不到

android:drawSelectorOnTop="false"点击某条记录不放,颜色会在记录的后面,成为背景色,但是记录内容的文字是可见的

3)cacheColorHint属性

当你在点击ListView或者拖动它的时候,是不是发现ListView中的条目变黑了?这点大大影响了整体UI的和谐统一。其实解决方法很简单,利用ListView的父类AbsListView提供的XML属性----android:cacheColorHint就可以解决。cacheColorHint表明列表将始终以单一、固定的颜色来绘制背景,如果想与整体的背景色统一,只需要将其设为透明(#00000000)即可

5.圆角边框

设置边框圆角可以在drawable-mdpi目录里定义一个xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff"/>    // solid的表示填充颜色
<corners android:topLeftRadius="10dp"   // corners则是表示圆角半径
// 注意的是这里bottomRightRadius是左下角而不是右下角,bottomLeftRadius右下角
android:topRightRadius="10dp"
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"/>
<stroke android:width="1dp" android:color="#ffa8abad" /> // 设置边框宽度和颜色
</shape>

如果想引用这个xml,只需要@drawable/corners_bg.xml即可

复杂圆角边框背景设置可参看:/article/8710223.html

6.使用XML的方式为背景添加渐变,描边,圆角的效果

首先,在res/Drawable 文件夹里面添加一个jbshape.xml文件,然后写入如下代码

<shape>
<!-- 实心 -->
<solidandroid:color="#ff9d77"/>
<!-- 渐变 -->
<gradient
android:startColor="#ff8c00"
android:endColor="#FFFFFF"
android:angle="270"/>
<!-- 描边 -->
<stroke
android:width="2dp"
android:color="#dcdcdc"/>
<!-- 圆角 -->
<corners
android:topRightRadius="20dp"     // 右上角
android:bottomLeftRadius="20dp"   // 右下角
android:topLeftRadius="1dp"       // 左上角
android:bottomRightRadius="0dp"   // 左下角
/>
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp"/>
</shape>

solid:实心,就是填充的意思 android:color指定填充的颜色

gradient:渐变 android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。 另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。

stroke:描边 android:width="2dp" 描边的宽度,android:color 描边的颜色。 我们还可以把描边弄成虚线的形式,设置方式为: android:dashWidth="5dp"

android:dashGap="3dp" 其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。

corners:圆角 android:radius为角的弧度,值越大角越圆。 我们还可以把四个角设定成不同的角度

示例:用在Selector中作为Button的背景,分别定义了按钮的一般状态、获得焦点状态和按下时的状态,具体代码如下:

main.xml:

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TestShapeButton"
android:background="@drawable/button_selector" />

button_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<!-- 渐变 -->
<gradient android:endColor="#FFFFFF"
android:gradientRadius="50"
android:startColor="#ff8c00"
android:type="radial" />
<!-- 描边 -->
<stroke android:dashGap="3dp"
android:dashWidth="5dp"
android:width="2dp"
android:color="#dcdcdc" />
<!-- 圆角 -->
<corners android:radius="2dp" />
<padding android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<gradient android:angle="270"
android:endColor="#ffc2b7"
android:startColor="#ffc2b7" />
<stroke android:width="2dp"
android:color="#dcdcdc" />
<corners android:radius="2dp" />
<padding android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
</shape>
</item>
<item>
<shape>
<solid android:color="#ff9d77" />
<stroke android:width="2dp"
android:color="#fad3cf" />
<corners android:bottomLeftRadius="5dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="0dp"
android:topRightRadius="5dp" />
<padding android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
</shape>
</item>
</selector>

一般状态:


焦点状态:


按下状态:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: