一、TextView的讲解

《实例一》

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"                                      
android:orientation="vertical">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:background="#ccffee"
android:padding="3sp"
android:text="TextView的基本使用"
android:textColor="#cd0000"
android:textStyle="bold"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginLeft="10dp"
android:shadowColor="#F9F900"
android:shadowDx="30.0"
android:shadowDy="30.0"
android:shadowRadius="3.0"
android:text="带阴影的TextView"
android:textColor="#4A4AFF"
android:textSize="30sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:layout_marginLeft="10dp"
android:layout_marginTop="30dp"
android:background="@drawable/txt_rectborder"
android:padding="3sp"
android:text="带有边框的TextView"
android:textColor="#cd0000"
android:textStyle="bold"
/>
<TextView
android:id="@+id/text4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:layout_marginLeft="10dp"
android:layout_marginTop="30dp"
android:background="@drawable/txt_radiuborder"
android:padding="3sp"
android:text="带有圆角边框的TextView"
android:textColor="#cd0000"
android:textStyle="bold"
/>
</LinearLayout>

《属性讲解》

  基本使用

    id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置,又或者使用RelativeLayout时,参考组件用的也是id!

    layout_width:组件的宽度,一般写:**wrap_content**或 者**match_parent(fill_parent)**,前者是控件显示的内容多大,控件就多大,而后者会填满该控件所在的父容器;当然也可以设 置成特定的大小,比如我这里为了显示效果,设置成了200dp。

    layout_height:组件的宽度,内容同上。

    gravity:设置控件中内容的对齐方向,TextView中是文字,ImageView中是图片等等。

    text:设置显示的文本内容,一般我们是把字符串写到string.xml文件中,然后通过@String/xxx取得对应的字符串内容的,这里为了方便我直接就写到""里,不建议这样写!!!

    textColor:设置字体颜色,同上,通过colors.xml资源来引用,别直接这样写!  

    textStyle:设置字体风格,三个可选值:**normal**(无效果),**bold**(加粗),**italic**(斜体)

    textSize:字体大小,单位一般是用sp!  

    background:控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片哦!

  带有阴影的TextView

    android:shadowColor:设置阴影颜色,需要与shadowRadius一起使用哦!

    android:shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0  

    android:shadowDx:设置阴影在水平方向的偏移,就是水平方向阴影开始的横坐标位置

    android:shadowDy:设置阴影在竖直方向的偏移,就是竖直方向阴影开始的纵坐标位置

 带有边框的TextView

  (1)没有圆角:在drawable目录下面定义shape类型的xml文件,在TextView的background属性中使用

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--设置一个黑色宽度为5px的一个边框-->
<stroke android:color="#000000" android:width="5px"/>
<!--渐变-->
<gradient
android:angle="270"
android:endColor="#C0C0C0"
android:startColor="#FCD209"/>
<!-- 设置一一下边距-->
<padding
android:top="5px"
android:bottom="5px"
android:left="5px"
android:right="5px"/>
</shape>

(2)有圆角:在drawable目录下面定义shape类型的xml文件,在TextView的background属性中使用

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--设置一个黑色宽度为5px的一个边框-->
<stroke android:color="#000000" android:width="5px"/>
<!-- 设置边距-->
<padding
android:top="5dp"
android:bottom="5dp"
android:left="5dp"
android:right="5dp"/>
<!-- 设置一个透明背景色-->
<solid android:color="#87CEEB"/>
<!-- 设置圆角-->
<corners
android:bottomLeftRadius="50px"
android:bottomRightRadius="50px"
android:topLeftRadius="50px"
android:topRightRadius="50px"/>
</shape>

实例二:带有图片的TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"> <TextView
android:id="@+id/text1"
android:layout_width="200dp"
android:layout_height="200dp"
android:gravity="center"
android:textSize="20sp"
android:background="#ccffee"
android:padding="3sp"
android:text="Android"
android:textColor="#cd0000"
android:textStyle="bold"
android:drawableTop="@mipmap/ic_launcher"
android:drawableBottom="@mipmap/ic_launcher"
android:drawableLeft="@mipmap/ic_launcher"
android:drawableRight="@mipmap/ic_launcher"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="50dp"
android:orientation="horizontal">
<TextView
android:id="@+id/text2"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="20sp"
android:background="#ccffee"
android:padding="3sp"
android:text="Android1"
android:textColor="#cd0000"
android:textStyle="bold"
android:drawableTop="@mipmap/ic_launcher"
/>
<TextView
android:id="@+id/text3"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="20sp"
android:background="#ccffee"
android:padding="3sp"
android:text="Android2"
android:textColor="#cd0000"
android:textStyle="bold"
android:drawableTop="@mipmap/ic_launcher"
/>
<TextView
android:id="@+id/text4"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="20sp"
android:background="#ccffee"
android:padding="3sp"
android:text="Android3"
android:textColor="#cd0000"
android:textStyle="bold"
android:drawableTop="@mipmap/ic_launcher"
/>
<TextView
android:id="@+id/text5"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="20sp"
android:background="#ccffee"
android:padding="3sp"
android:text="Android4"
android:textColor="#cd0000"
android:textStyle="bold"
android:drawableTop="@mipmap/ic_launcher"
/>
</LinearLayout>
</LinearLayout>

属性讲解:

drawableTop(上),drawableButtom(下),drawableLeft(左),drawableRight(右) 另外也可以使用drawablePadding来设置图片与文字间的间距!与此同时我们会发现在xml文件中不能设置图片的的大小,这时我们需要在Java中实现

import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.TextView; public class MainActivity extends Activity {
private TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) findViewById(R.id.text1);
// 数组下标是0~3,依次是左上右下
Drawable[] drawables = textView1.getCompoundDrawables();
// 设置上面图片的大小
drawables[1].setBounds(200,0,200,200);
// 给TextView是四个方向设置图片也是左上右下,如果某个方向上面没有图片设置为null即可
textView1.setCompoundDrawables(drawables[0],drawables[1],drawables[2],drawables[3]);
}
}

实例三:使用autoLink属性识别链接类型

当文字中出现了URL,E-Mail,电话号码,地图的时候,我们可以通过设置autoLink属性;当我们点击 文字中对应部分的文字,即可跳转至某默认APP,比如一串号码,点击后跳转至拨号界面!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"> <TextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:textSize="20sp"
android:background="#ccffee"
android:padding="3sp"
android:text="百度http://baidu.com"
android:autoLink="web"
android:textColor="#cd0000"
android:textStyle="bold"
/>
<TextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:textSize="20sp"
android:background="#ccffee"
android:padding="3sp"
android:text="123456"
android:autoLink="phone"
android:textColor="#cd0000"
android:textStyle="bold"
/>
</LinearLayout>

aaarticlea/png;base64,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" alt="" width="270" height="393" />

  说明:all就是全部都包含,自动识别协议头~ 在Java代码中可以调用setAutoLinkMask(Linkify.ALL); 这个时候可以不写协议头,autolink会自动识别,但是还要为这个TextView设置: setMovementMethod(LinkMovementMethod.getInstance()); 不然点击了是没效果的!

实例四:TextView对html的支持

  说明:不是所有的html标签都支持,常用如下:

  • <font>:设置颜色和字体。
  • <big>:设置字体大号
  • <small>:设置字体小号
  • <i><b>:斜体粗体
  • <a>:连接网址
  • <img>:图片
package com.example.test3;

//文字和链接
import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
import android.widget.TextView; public class MainActivity extends Activity {
private TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) findViewById(R.id.text1);
// 定义html字符串
String s1 = "<font color='blue'><b>百度一下,你就知道~:</b></font><br>";
s1 += "<a href = 'http://www.baidu.com'>百度</a>";
// 设置给TextView,需要调用Html.fromHtml()方法
textView1.setText(Html.fromHtml(s1));
// 设置链接的类型,如果是all可以不写协议头,会自动识别
textView1.setAutoLinkMask(Linkify.ALL);
// 在Java中调用链接,需要设置下面的方法,不然没有作用
textView1.setMovementMethod(LinkMovementMethod.getInstance());
}
}
package com.example.test3;

//图片
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
import android.widget.TextView; import java.lang.reflect.Field; public class MainActivity extends Activity {
private TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) findViewById(R.id.text1);
String s1 = "图片:<img src = 'ic_launcher'/><br>";
textView1.setText(Html.fromHtml(s1, new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
Drawable draw = null;
try {
// 得到图片的位置
Field field = R.mipmap.class.getField(source);
// 得到图片的id
int resourceId = Integer.parseInt(field.get(null).toString());
// 得到图片
draw = getResources().getDrawable(resourceId);
// 设置图片的大小
draw.setBounds(0, 0, draw.getIntrinsicWidth(), draw.getIntrinsicHeight());
} catch (Exception e) {
e.printStackTrace();
}
return draw;
}
}, null));
}
}

实例四:SpannableString&SpannableStringBuilder定制文本

(1)首先SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的 特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来, 比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。所以,总而言之,SpannableString、 SpannableStringBuilder与String一样, 首先也是传字符串,但SpannableString、 SpannableStringBuilder可以对这些字符串添加额外的样式信息,但String则不行。

(2)注意:如果这些额外信息能被所 用的方式支持,比如将SpannableString传给TextView;也有对这些额外信息不支持的。对于不 支持的情况,SpannableString和SpannableStringBuilder就是退化为String类型,直接显示原来的String字 符串,而不会再显示这些附加的额外信息。

(3)它们的区别在于 SpannableString像一个String一样,构造对象的时候传入一个String,之后再无法更改String的内容,也无法拼接多个 SpannableString;而SpannableStringBuilder则更像是StringBuilder,它可以通过其append()方 法来拼接多个String:

(4)void setSpan (Object what, int start, int end, int flags)


数意义:给SpannableString或SpannableStringBuilder特定范围的字符串设定Span样式,可以设置多个(比如同时加
上下划线和删除线等),Falg参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动作,即是否对新插入的字符应用同样的样式。(这个后面会具
体举例说明)

参数说明:

object what :对应的各种Span,后面会提到;
int start:开始应用指定Span的位置,索引从0开始
int end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。从下面的例子也可以看出来。
int flags:取值有如下四个
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式 
Spannable.SPAN_EXCLUSIVE_INCLUSIVE :前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE :前面包括,后面不包括。
Spannable.SPAN_INCLUSIVE_INCLUSIVE :前后都包括。

(5)对应的各种Object:

  • BackgroundColorSpan 背景色
  • ClickableSpan 文本可点击,有点击事件
  • ForegroundColorSpan 文本颜色(前景色)
  • MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
  • MetricAffectingSpan 父类,一般不用
  • RasterizerSpan 光栅效果
  • StrikethroughSpan 删除线(中划线)
  • SuggestionSpan 相当于占位符
  • UnderlineSpan 下划线
  • AbsoluteSizeSpan 绝对大小(文本字体)
  • DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。
  • ImageSpan 图片
  • RelativeSizeSpan 相对大小(文本字体)
  • ReplacementSpan 父类,一般不用
  • ScaleXSpan 基于x轴缩放
  • StyleSpan 字体样式:粗体、斜体等
  • SubscriptSpan 下标(数学公式会用到)
  • SuperscriptSpan 上标(数学公式会用到)
  • TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
  • TypefaceSpan 文本字体
  • URLSpan 文本超链接
(6)实例
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.widget.TextView; public class MainActivity extends Activity {
private TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) findViewById(R.id.text1);
SpannableString span = new SpannableString("红色打电话斜体删除线绿色下划线图片:.");
//1.设置背景色,setSpan时需要指定的flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)
span.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//2.用超链接标记文本
span.setSpan(new URLSpan("tel:123456"), 2, 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
//3.用样式标记文本(斜体)
span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//4.用删除线标记文本
span.setSpan(new StrikethroughSpan(), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//5.用下划线标记文本
span.setSpan(new UnderlineSpan(), 10, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//6.用颜色标记
span.setSpan(new ForegroundColorSpan(Color.GREEN), 10, 13,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//7.//获取Drawable资源
Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
//8.创建ImageSpan,然后用ImageSpan来替换文本
ImageSpan imgspan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
span.setSpan(imgspan, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
textView1.setText(span);
}
}

package com.example.test3;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ImageSpan;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity {
private TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView) findViewById(R.id.text1);
StringBuffer sb = new StringBuffer();
for(int i = 0;i < 20;i++){
sb.append("好友" + i + ",");
}
String user = sb.substring(0,sb.lastIndexOf(",")).toString();
textView1.setMovementMethod(LinkMovementMethod.getInstance());
textView1.setText(addClickPart(user), TextView.BufferType.SPANNABLE);
} private SpannableStringBuilder addClickPart(String str) {
// 定义点赞的图标
ImageSpan imgspan = new ImageSpan(MainActivity.this,R.mipmap.ic_launcher);
imgspan.getDrawable().setBounds(0,0,imgspan.getDrawable().getIntrinsicWidth(),imgspan.getDrawable().getIntrinsicHeight());
SpannableString ss = new SpannableString("p.");
ss.setSpan(imgspan,0,1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
// 连接多个字符串
SpannableStringBuilder ssb = new SpannableStringBuilder(ss);
ssb.append(str);
String[] users = str.split(",");
if(users.length > 0){
for(int i = 0;i < users.length;i++){
final String name = users[i];
final int start =str.indexOf(name) + ss.length();
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View view) {
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); }
}
return ssb.append("等" + users.length + "个人觉得很赞");
}
}

实例五:跑马灯

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/txtOne"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="你整天说着日了狗日了狗,但是你却没有来,呵呵呵呵呵呵呵呵呵呵~"/>
</LinearLayout>

实例六:行间距、字间距、自动换行(默认是自动换行)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<!-- 自动换行-->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
android:singleLine="false"
android:text="呵呵呵呵呵呵呵呵呵呵~~~~~~~~~~aaaaaa"
android:maxLines="5"/>
<!-- 字符间距-->
<TextView
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textScaleX="2.0"
android:text="呵呵呵呵呵呵呵呵呵呵~~~~~~~~~~aaaaaa"/>
<!-- 行间距lineSpacingExtra设置大小、lineSpacingMultiplier设置行的倍数默认是1。0-->
<TextView
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
android:lineSpacingExtra="10dp"
android:text="呵呵呵呵呵呵呵呵呵呵~~~~~~~~~~aaaaaa"/>
<TextView
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30sp"
android:lineSpacingMultiplier="1.5"
android:text="呵呵呵呵呵呵呵呵呵呵~~~~~~~~~~aaaaaa"/>
</LinearLayout>
												

android基本控件学习-----TextView的更多相关文章

  1. Android UI控件:TextView

    TextVIew的属性详解 android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web /email/phone/ma ...

  2. android基本控件学习-----Button

    Button讲解: 一.在我们实际的使用button的时候经常会对button不同状态会有不同的显示,在讲解Button前,首先对drawable下面的statelistdrawable的相关知识讲一 ...

  3. android基本控件学习-----ImageView

    ImageView的讲解 一.src和background的区别 background我们通常理解是背景,而src是内容,当使用src填入图片的时候是以图片的大小直接填充,并不会进行拉伸,而backg ...

  4. android基本控件学习-----Date&Time

    Date&Time这里一共讲解下面6个: TextClock(文本时钟),AnalogClock(模拟时钟),Chronometer(计时器),DatePicker(日期选择器),TimePi ...

  5. android基本控件学习-----EditText

    EditText的讲解 一.<实例一>:用户登录 <?xml version="1.0" encoding="utf-8"?> < ...

  6. android基本控件学习-----RadioButton&CheckBox

    RadioButton(单选框)和CheckBox(复选框)讲解: 一.基本用法和事件处理 (1)RadioButton单选框,就是只能选择其中的一个,我们在使用的时候需要将RadioButton放到 ...

  7. android基本控件学习-----SeekBar&RatingBar

    SeekBar(拖动条)和RatingBar(星级评分条)讲解 一.SeekBar(拖动条) (1)拖动条简单理解就是可以拖动的线,这个对我们来讲很常见,比如视频播放或者音乐播放我们拖动播放的进度,下 ...

  8. android基本控件学习-----ScrollView

    ScrollView(滚动条)的讲解: 一.对于ScrollView滚动条还是很好理解的,共有两种水平和垂直,ScrollView和HorizontalScrollview,这个里面不知道该总结写什么 ...

  9. android基本控件学习-----ToggleButton&Switch

    ToggleButton(开关按钮)和Switch(开关)讲解: 一.核心属性讲解: (1)ToggleButton textOn:按钮被选中的时候文字显示 textOff:按钮没有被选中的时候文字显 ...

随机推荐

  1. AB test学习笔记

    AB Test 介绍: https://vwo.com/ab-testing/ AB Test 的意义: 数据分析告诉我们要不要去做一件事情,ab 实验反馈告诉我们我们做得好不好,哪里有问题,以及衡量 ...

  2. jsp中的文件上传

    首先需要有以下的jar包 jsp代码如下: <!-- ${pageContext.request.contextPath}为: "/" + 当前项目名 --> < ...

  3. SQL Server中的日期,时间组合查询

    如图所示,Jdate和Jdate2是两个分开的字段,一个是date类型,存储日期,一个是time(0)类型,存储具体时间 现在有这样的要求,就是获得(Jdate和Jdate2组合起来的日期时间)在(当 ...

  4. CentOS下安装php gd库报错Error: php56w-common conflicts with php-common-5.3.3-48.el6_8.x86_64

    因为服务器缺少php gd库,因为系统是centos,就是用yum去安装,一安装就报错如下: [root@iZ28sdxghs2Z ~]# yum install php-gd Loaded plug ...

  5. Storm: 遇到问题总结

    1.没有ack : kafkaspout id 重复导致每次读最新没有数据. 2.由于storm提供的读取kafka的enternal工具存在bug,导致重复读取数据,致使数据不准确.storm bu ...

  6. mysql--timestamp加减

    利用timestamp()对timestamp类型进行秒加减操作: 1.加10秒: 2.减10秒:

  7. VS2010Datatable查看器查看超时(Microsoft.VisualStudio.DebuggerVisualizers)

    这个问题由来已久,却一直没有找到原因.大家都知道,VisualStudio的DebuggerVisualizers是一个非常方便的插件,可以帮助我们调试时查看Datatable视图,前阵子突然发现在查 ...

  8. 商品评分效果JavaScript

    <script> window.onload=function(){ //----------选中的星星会多出一个属性:isClick="true" 藉此来获取评分-- ...

  9. C#入门篇5-7:流程控制语句 continue语句

    #region continue语句 public class ContinueApp { public static void Fun1() { //标签打印显示1…30,若能被3整除则不打印. ; ...

  10. Android数据储存之SharedPreferences

    Android中SharedPreferences通常与Editor连用 接口SharedPreferences常用方法: boolean contains(String str):判断SharedP ...