Android开发小技巧

android:clipChildren属性的用法

是否限制子View在父View的范围内,默认为ture

示例

如上,我们遇到这种需求的时候,可能布局写得比较复杂,但是我们在xml的根布局添加android:clipChildren=”true”的时候我们发现,我们可以轻松的实现这样的布局。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false" //一定要在根布局添加才有效
android:orientation="vertical"
tools:context="com.wangjun.testandroidapi.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:background="#90c7c4c4"
android:gravity="bottom"
android:orientation="horizontal">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:src="@mipmap/ic_launcher"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_weight="1"
android:src="@mipmap/ic_launcher"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>
</RelativeLayout>

Material Design Button Styles

在AppCompat Support Library 定义了几个很有用的style,当我们遇到button想要拥有统一的点击效果,又不局限与去手写selector或者ripple的时候,我们不妨试试这种:

1
2
3
style="@style/Widget.AppCompat.Button.Colored"
style="@style/Widget.AppCompat.Button.Borderless"
style="@style/Widget.AppCompat.Button.Borderless.Colored"

Widget.AppCompat.Button

1
2
3
4
5
<Button
style="@style/Widget.AppCompat.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/simple_button"/>

Widget.AppCompat.Button.Colored

1
2
3
4
5
<Button
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/simple_button"/>

Widget.AppCompat.Button.Borderless

1
2
3
4
5
<Button
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/simple_button"/>

Widget.AppCompat.Button.Borderless.Colored

1
2
3
4
5
<Button
style="@style/Widget.AppCompat.Button.Borderless.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/simple_button"/>

?android:selectableItemBackground

如果你想要最快速度地给view加上点击效果,试试在xml中加上 android:background=”?android:selectableItemBackground”或者?android:selectableItemBackgroundBorderless

注:Android 5.0以上是ripple波纹效果,5.0以下是普通的点击效果;必须设置点击事件,否则没有效果

1
?android:selectableItemBackground

image

1
2
3
4
5
6
7
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:foreground="?android:selectableItemBackground"
android:text="点我点我嘛"/>
1
?android:selectableItemBackgroundBorderless

image

1
2
3
4
5
6
7
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:foreground="?android:selectableItemBackgroundBorderless"
android:text="点我点我嘛"/>

TextUtils

link字符串处理工具类

  • TextUtils.equals(CharSequence a, CharSequence b)
1
2
3
4
5
6
StringBuilder stringBuilder=new StringBuilder("a");
StringBuffer stringBuffer=new StringBuffer("a");
TextUtils.equals("a", "a"); //true
TextUtils.equals("a",stringBuilder); //true
TextUtils.equals("a",stringBuffer); //true
TextUtils.equals("a", null); //false
  • split(String text, Pattern pattern)
1
2
3
TextUtils.split(line, "-"); //错误用法
TextUtils.split(line, ",\\-");
// 注意特殊字符
  • isEmpty()
1
2
3
TextUtils.isEmpty("") //true
TextUtils.isEmpty("null") //false
TextUtils.isEmpty(null) //true
  • htmlEncode
    使用HTML编码这个字符串,将’<’’>’’&’等转义为对应的字符串

  • isDigitsOnly
    判断字符串中是否只有数字

1
2
TextUtils.isDigitsOnly("1223444") //true
TextUtils.isDigitsOnly("12234dddd44") //false

selector设置特殊效果

通过android:enterFadeDuration以及android:exitFadeDuration,设置此属性可以使状态变换时会有淡入淡出的效果

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:enterFadeDuration="@android:integer/config_shortAnimTime"
android:exitFadeDuration="@android:integer/config_shortAnimTime">
<item android:state_pressed="true" android:drawable="@color/colorAccent" />
<item android:state_focused="true" android:drawable="@color/colorAccent"/>
<item android:drawable="@android:color/transparent"/>
</selector>

android:clipToPadding

有时候我们在listview设计时会有一些内边距的要求,这时候就比较尴尬,有人说直接用padding不就可以解决这个问题了吗?但是用完后有人发现在上下拉动整个内容时会看到有一个白色的内边距在那里,非常的丑,这时候我们就需要用到Listview的一个强大的属性:android:clipToPadding=false,默认android:clipToPadding=true的。

image

1
2
3
4
5
6
<ListView
android:id="@+id/list"
android:clipToPadding="false"
android:paddingTop="50dip"
android:layout_width="match_parent"
android:layout_height="match_parent">

继续更新…