前言

以下收藏一些Android学习过程中比较有用东西

文章链接

​ANDROID SUPPORT兼容包详解​​​
​ android基础–tools:context=”.MainActivity”作用​​

1.线性布局设置分割线:

Android学习笔记_ide


首先给出分割线的样式,也可以使一个图片文件,这里我们用shape

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
>
<size android:height="2px"/>
<solid android:color="@android:color/holo_orange_dark"/>
</shape>

然后在线性布局中设置

android:divider="@drawable/divider_line"
//显示位置
android:showDividers="middle"
//距离两边的间距
android:dividerPadding="10px"

2.GridLayout的使用

<GridLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
//设置几行
android:rowCount="2"
//设置几列
android:columnCount="4"
android:orientation="horizontal"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="你好"
//跨几行
android:layout_rowSpan="2"
//必须设置
android:layout_gravity="fill"
/>
<Button
android:text="Button"
/>
<Button

android:text="你好"
/>
<Button
android:text="Button"
/>
<Button
android:text="你好"
/>
<Button
android:text="Button"
/>
</GridLayout>

Android学习笔记_xml_02

3.带阴影的文字

Android学习笔记_xml_03

android:shadowDx="10"
android:shadowDy="10"
android:shadowColor="#00ff00"
android:shadowRadius="3"

4.带边框的文字

Android学习笔记_ide_04

<TextView
android:layout_width="200dp"
android:layout_height="50dp"
android:text="我是文字"
android:gravity="center"
android:textSize="20sp"
android:background="@drawable/divider_line"
android:textColor="@android:color/white"
/>
<TextView
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:text="我是文字"
android:gravity="center"
android:textSize="20sp"
android:background="@drawable/divider_line2"
android:textColor="@android:color/holo_blue_bright"
/>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
>
<stroke android:color="@android:color/black"
android:width="3px"
/>
<corners android:radius="5dp"/>
<solid android:color="@android:color/holo_orange_dark"/>

</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
>
<stroke android:color="@android:color/black"
android:width="3px"
/>
<corners android:radius="5dp"/>
<gradient android:angle="90"
android:startColor="@android:color/white"
android:endColor="@android:color/transparent"
/>
</shape>

gradient设置渐变,angle设置从哪里开始渐变,0代表左边,然后逆时针,依次是90,180,270,下,右,上

5.设置文字周围图片大小

Android学习笔记_android_05

//获取图片资源数组
Drawable[] drawables = tv.getCompoundDrawables();
//设置上方图片大小,方向为左上右下,索引依次从0-3
drawables[1].setBounds(0,0,200,200);
tv.setCompoundDrawables(drawables[0],drawables[1],drawables[2],drawables[3]);

6.文字设置autoLink

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="电话号码:18201431960"
android:autoLink="phone"
android:textSize="20sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="邮箱:1615404043@qq.com"
android:autoLink="email"
android:textSize="20sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="百度:http://www.baidu.com"
android:autoLink="web"
android:textSize="20sp"
/>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

Java代码设置

tv.setText("中国电信:13399898832");
// 设置autoLink类型
tv.setAutoLinkMask(Linkify.PHONE_NUMBERS);
// 设置textview的行动方式
tv.setMovementMethod(LinkMovementMethod.getInstance());

设置文字滚动

Android学习笔记_xml_06

<TextView
android:id="@+id/tv"
android:layout_width="200dp"
android:layout_height="30dp"
android:text="大幅扩大数据库法律进行产能,阿斯蒂芬就是快点放假打三分斯蒂芬斯蒂芬地方"
android:textSize="20sp"
android:scrollbars="none"
/>
tv = (TextView) findViewById(R.id.tv);
tv.setMovementMethod(ScrollingMovementMethod.getInstance());

7.TextView与html结合使用
常用的标签:

<font>:设置颜色和字体。
<big>:设置字体大号
<small>:设置字体小号
<i><b>:斜体粗体
<a>:连接网址
<img>:图片
String str = "<font color='blue'>百度一下,你就知道<font><br/>";
str += "<a href='http://www.baidu.com'>百度一下<i>adsf</i></a>";
tv.setText(Html.fromHtml(str));
tv.setMovementMethod(LinkMovementMethod.getInstance());

插入图片

Android学习笔记_android_07

tv = (TextView) findViewById(R.id.tv);
String str = "图片:<img src='ic_launcher'/>";
tv.setText(Html.fromHtml(str, new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
Drawable drawable = null;
try {
Field field = R.drawable.class.getField(source);
// 返回对象中字段的值
int resourceId = Integer.parseInt(field.get(null).toString());
drawable = getResources().getDrawable(resourceId);
drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
} catch (Exception e) {
e.printStackTrace();
}
return drawable;
}
},null));
tv = (TextView) findViewById(R.id.tv);
tv2 = (TextView) findViewById(R.id.tv2);
SpannableString span = new SpannableString("红色打电话斜体删除线绿色下划线图片:");
// 文本颜色
span.setSpan(new ForegroundColorSpan(Color.RED),0,2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 文本超链接
span.setSpan(new URLSpan("tel:18201431960"),2,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 字体样式
span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC),5,7,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//删除线
span.setSpan(new StrikethroughSpan(),7,10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(new ForegroundColorSpan(Color.GREEN),10,12,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 下划线
span.setSpan(new UnderlineSpan(),12,15,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置图片
Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
ImageSpan imageSpan = new ImageSpan(drawable,ImageSpan.ALIGN_BOTTOM);
span.setSpan(imageSpan,17,18,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(span);
//========================================================其他span
String str = "公共条款";
SpannableString spannableString = new SpannableString(str);
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this,"点击了",Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.BLUE);
ds.setUnderlineText(false);
}
},0,str.length(),0);
// 必须设置,否则没点击效果
tv2.setMovementMethod(LinkMovementMethod.getInstance());
tv2.setText(spannableString);
// 去掉文字点击后北京高亮
tv2.setHighlightColor(Color.TRANSPARENT);

效果图

Android学习笔记_ide_08

tv = (TextView) findViewById(R.id.tv);
tv2 = (TextView) findViewById(R.id.tv2);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {
sb.append("好友"+i+ ", ");
}
String likeUsers = sb.substring(0,sb.length()-1);
tv.setMovementMethod(LinkMovementMethod.getInstance());
//添加图片
Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
ImageSpan imagespan = new ImageSpan(drawable);
SpannableString span = new SpannableString(" ");
span.setSpan(imagespan,0,1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
SpannableStringBuilder ssb = new SpannableStringBuilder(span);
//给图片后面添加文字
ssb.append(likeUsers);
String[] result = likeUsers.split(",");
if (result.length > 0) {
for (int i = 0; i < result.length; i++) {
final String name = result[i];
int start = likeUsers.indexOf(name)+span.length();
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.BLUE);
ds.setUnderlineText(false);
}
},start,start + name.length(),0);
}
tv.setText(ssb.append("等"+result.length+"人觉得很赞"));
tv.setHighlightColor(Color.TRANSPARENT);
}

Android学习笔记_android_09

设置TextView水平缩放和文字之间的行间距

Android学习笔记_android_10

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="我不知道"
android:textScaleX="2"
/>
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="我不知道\n你好吗"
android:lineSpacingExtra="10dp"
/>

设置上下标

设置上标
SuperscriptSpan superscriptSpan = new SuperscriptSpan();
SpannableString spannableString = new SpannableString("X\"");
spannableString.setSpan(superscriptSpan,1,2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(spannableString);
// 设置下标
SubscriptSpan subscriptSpan = new SubscriptSpan();
SpannableString spannableString2 = new SpannableString("X1");
spannableString2.setSpan(subscriptSpan,1,2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv2.setText(spannableString2);

Android学习笔记_xml_11

EditText

//获得焦点后选中所有内容
android:selectAllOnFocus="true"

进入页面自动弹出软键盘,只需要两步
1.让edittext获取焦点
2.设置所在Activity

android:windowSoftInputMode="stateVisible"

setCompoundDrawablesWithIntrinsicBounds

在控件周围设置图片

Android学习笔记_ide_12

public class EditTextWithDel extends android.support.v7.widget.AppCompatEditText {
private static final String TAG = "EditTextWithDel";
private Drawable drawable;

public EditTextWithDel(Context context) {
this(context,null);
}

public EditTextWithDel(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public void init(){
drawable = getResources().getDrawable(R.drawable.icon_delete);
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
public void afterTextChanged(Editable s) {
setDrawable();
}
});
setDrawable();
}
public void setDrawable(){
if(length() < 1) {
setCompoundDrawablesWithIntrinsicBounds(null,null,null,null);
} else {
setCompoundDrawablesWithIntrinsicBounds(null,null, drawable,null);
}
}

@Override
public boolean onTouchEvent(MotionEvent event) {
if(drawable!=null&&event.getAction() == MotionEvent.ACTION_UP) {
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
Log.d(TAG, "onTouchEvent: eventX " + eventX+"eventY"+eventY);
Rect rect = new Rect();
// 获取视图在屏幕中的可见坐标
getGlobalVisibleRect(rect);
// 设定矩形区域
rect.left = rect.right - 50;
if (rect.contains(eventX,eventY)) {
setText("");
}
}
return super.onTouchEvent(event);
}
}

Android学习笔记_ide_13

下面以我的魅蓝note3为例,来获取各个部分的尺寸,这里不考虑ActionBar,我们在主题中不使用ActionBar

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
int widthPixels = displayMetrics.widthPixels;
int heightPixels = displayMetrics.heightPixels;
Log.d(TAG, "屏幕宽高: " +widthPixels+":"+heightPixels);
Rect rect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
Log.d(TAG, "引用程序APP区域: "+rect.width()+":"+rect.height());
Rect rect2 = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect2);
int statusBarHeight = rect2.top;
Log.d(TAG, "状态栏高度: "+statusBarHeight);
Rect rect3 = new Rect();
getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(rect3);
Log.d(TAG, "View布局区域: "+rect3.width()+":"+rect3.height());
}

结果如下:

Android学习笔记_android_14