Button的使用
不要阴影Button ---> TextView (5.0新特性)
<!-- 去按钮立体效果 -->
<item name="android:button">@null</item>
TextView和button有什么区别??
使用TextView响应点击事件的时候,必须加上去android:clickable="true"
针对两者之间的区别,进行处理。
mEtPswd.setError("对不起,密码不能为空"); 实现的效果,很难看;(了解即可,可以用来提示输入格式错误)
代码触发按钮点击事件
代码是: btn.performClick(); (这里的点击触发好像和butterknife有冲突,没有反应?待定)
把按钮变成不可点击,并且显示倒计时(正在获取)
requestCodeBtn.setClickable(false);
requestCodeBtn.setText("重新发送(" + i-- + ")"); 加上一个线程,进行循环、
ImageView的属性
图片不是不能使用jpg格式的,——而是图片的命名,不能全部都是数字,会和R文件冲突;
前景色与背景色的区分,以及scaleType只能配合前景色使用;
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/main_bottom_tab_cart" />
background属性控件通用的背景设置,src属性ImageView专有的前景展示;
imgView.setImageResource(R.drawable.*);
// 获取控件的测量高度
originHeight = headerImage.getHeight(); // headerView.getMeasuredHeight();
// 获取图片的真实高度
maxHeight = headerImage.getDrawable().getIntrinsicHeight();
Log.d("TAG", "originHeight: " + originHeight);
1、设置背景图
SetBackgroundResource(Resource.Drawable.center_lf_bg);
2、清除背景图
SetBackgroundResource(0);
3、Imageview 显示本地绝对路径图片
iv.setImageURI(Uri.fromFile(new File(new File("/sdcard/test.jpg")));
android:scaleType属性
参考文章:
http://www.2cto.com/kf/201301/181290.html
http://liangruijun.blog.51cto.com/3061169/807963/
ImageView.ScaleType.FIT_XY|android:scaleType="fitXY" 把图片按照指定的大小在View中显示,拉伸显示图片,不保持原比例,填满View.
ImageView.ScaleType.CENTER|android:scaleType="center" 以原图的几何中心点和ImagView的几何中心点为基准,按图片的原来size居中显示,不缩放,当图片长/宽超过View的长/宽,则截取图片的居中部分显示ImageView的size.当图片小于View 的长宽时,只显示图片的size,不剪裁。
android:scaleType="centerInside" 以原图的几何中心点和ImagView的几何中心点为基准,将图片的内容完整居中显示,通过按比例缩小原来的size使得图片长(宽)等于或小于ImageView的长(宽)
android:scaleType="center" 针对src的设置,才有效;(可以参考下面的区别)
android:src="@drawable/video_wait"
如果是android:background="@drawable/video_wait",就会无效,填充满控件;
<ImageView
android:layout_width="43dp"
android:layout_height="43dp"
android:scaleType="fitXY"
android:src="@drawable/ease_default_avatar" />
ImageView的background和src属性有什么区别
ImageButton 是带图标的Button控件,有src的属性,也就是设置他的图标,也有一个所有控件公有的属性background, 这个也可以设置它的“图标”。
其实,src才是设置图标,而background只是设置背景。
如果控件的大小是100*100 图片资源是80*80的话,那么用src,图片就会居中显示,如果使用background那么图片就会被拉伸充满控件。
重要的是,background是底层的图片资源,src是覆盖在background上面的资源,他们可以叠加使用,实现选中的效果。在ActivityGroup用到。
background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸 。
src是图片内容(前景),bg是背景,可以同时使用。
此外:scaleType只对src起作用;bg可设置透明度?
比如在ImageButton中就可以用Android:scaleType控制图片的缩放方式
注意:控制的图片为资源而不是背景,即android:src="@drawable/logo",而非android:background="@drawable/logo"。
程序中动态加载图片也类似,如:应该imgView.setImageResource(R.drawable.*);
而非imgView.setBackgroundResource(R.drawable.*);
Drawable和Bitmap的区别
http://blog.csdn.net/kazeik/article/details/17659263
Bitmap - 称作位图,我们理解为一种存储对象比较好。Bitmap是逐像素存储的。存储效率较低。
Drawable - 作为Android平台下通用的图形对象,它可以装载常用格式的图像,
比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。
Bitmap是Drawable . Drawable不一定是Bitmap .就像拇指是指头,但不是所有的指头都是拇指一样.
Drawable在内存占用和绘制速度这两个非常关键的点上胜过Bitmap
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.img_test);
mCache.put("testDrawable", drawable);
Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.img_test);
mCache.put("testBitmap", bitmap);
Bitmap和Drawable相互转换的方法 http://blog.csdn.net/hezhipin610039/article/details/7899248
Bitmap缩放、获得圆角图片 、Drawable缩放 http://dyh7077063.iteye.com/blog/970672 (关于重绘)
TextView
特殊控件(点赞/取消)
CheckedTextView,就可以设置mTv1.setChecked(true); 点赞 / 取消点赞
Android中动态设置TextView的颜色
还有很多的TextView需要响应点击事件,加上去clickable,
自己写一个自定义的控件么?
tv.setTextColor(Color.rgb(255, 255, 255));
tvcolor.setBackgroundColor(Color.argb(alpha, red, green, blue)); (三原色自由搭配的场景)
tv.setTextColor(Color.parseColor("#FFFFFF"));
tv.setTextColor(getResources().getColor(R.color.my_color));
设置TextView的行间距、行高
1、android:lineSpacingExtra
设置行间距,如”8dp”。
2、android:lineSpacingMultiplier
设置行间距的倍数,如”1.5″。
在代码中设置textview的size
setTextSize(TypedValue.COMPLEX_UNIT_PX,22); //22像素
setTextSize(TypedValue.COMPLEX_UNIT_SP,22); //22 SP
平时用的少,动态设置时 使用 两个形参那个参数就行
单行显示
android:ellipsize="end" 用于设定当文本内容超出控件宽度时,文本的缩略方式。
android:singleLine="true",该方法已经不建议使用了
TextView最大长度限制,超出部分省略号显示
android:maxEms="7" android:maxLines="1" android:ellipsize="end"android:maxLength="7"对该功能没有帮助
textview加下划线、删除线
//添加下划线
tv_login_findPassword =(TextView) findViewById(R.id.tv_login_findPassword);
tv_login_findPassword.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG ); //下划线
或者这样写.
TextView textView = (TextView)findViewById(R.id.testView);
textView.setText(Html.fromHtml("<u>"+"hahaha"+"</u>"));
//添加删除线
tv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
Android TextView中字体加粗
在xml文件中设置字体加粗,相信大家都会了,但是对于中文字体,在xml文件中设置是不起作用的,需要在代码中设置,具体操作可见下面方法,大家有更好的方法可以多多交流啊。
英文字体加粗
布局文件中这样设置即可:
XML/HTML代码 android:textStyle="bold"
// 在代码中设置加粗
tv.getPaint().setFlags(Paint.FAKE_BOLD_TEXT_FLAG);
中文字体加粗:
TextView textView= new TextView(context);//或从xml导入
TextPaint paint = textView.getPaint();
paint.setFakeBoldText(true);
有些属性在运行apk的时候是被忽略的,只在设计布局的时候有效:
在根布局上面添加这个
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.mxg.demo2.ui.Main3Activity"
在TextView控件中,tools:text="I am a title" 参考资料
tvTitle.setText(null); // 是可以设置为null的、
实现TextView中文字链接的方式 :(了解一下)
当文字中出现URL、E-mail、电话号码等的时候,可以将TextView的android:autoLink属性设置为相应的的值,
如果是所有的类型都出来就是android:autoLink="all"。
一般有:android:autoLink="web" (email、tel、)
计算TextView的文本长度
String s1 = "3fsd";
int length = s1.length();
tv1.setText(length+""); // 4
如何限定Android的Text中的输入长度呢?
方法一:可以在layout xml中加上属性android:maxLength
比如:
<EditText
android:id="@+id/editTextShow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hint"
android:cursorVisible="false"
android:lines="1"
android:maxLength="16" />
方法二:在代码中控制
EditText mEdit = (EditText)findViewById(R.id.mEdit);
InputFilter[] filters = {new LengthFilter(10)};
mEdit.setFilters(filters);
方式三:
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});
android:ems="10" 什么意思
android:maxLength, 限制输入字符数。如设置为5,那么仅可以输入5个汉字/数字/英文字母。
android:ems, 设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度,如图:(参照API的翻译)
网友解释:
宽度为10个字符的宽度
xml中 android:ems属性 ,作为EditText 默认生成 的属性,其含义是需要编辑的 字符串长度 。
设置为10时,最多编辑 10个em ,一个em单位是 两个inch ,但是随着自动调整,在Android中 em代表‘M’的数量 。
但是 EditText的属性 ,只有在 android:layout_width=“wrap_content” 时,才会显示;
如果是 android:layout_width=“match_parent” 时,则不会有变化。
设置不同样式的文字字体
你可以在程序中放入ttf字体文件,在程序中使用Typeface设置字体。
第一步,在assets目录下新建fonts目录,把ttf字体文件放到这。
第二步,程序中调用:
AssetManager mgr=getAssets();//得到AssetManager
Typeface tf=Typeface.createFromAsset(mgr, "fonts/ttf.ttf");//根据路径得到Typeface
tv.setTypeface(tf);//设置字体
参考文章:http://blog.sina.com.cn/s/blog_8984d3f30100wzb5.html
设置富文本显示-Spannable的使用
在android中,有时候需要对文本进行各种特别的设置,比如颜色、大小、首行缩进,或者是在一段文本中加入图片,甚至是书写一些特殊的公式。
在使用中通常使用Spannable spn = new SpannableString("字符串");或者通过SpannableStringBuilder对象来进行构建。
tv_desc.setText(span, TextView.BufferType.SPANNABLE);
解决Android textview自动换行问题
换行 ---> 直接在字符串里面,加入 \n 就可以了。 \t 相当于tab,缩进
\n 回车, 本义是光标往下一行(不一定到下一行行首),n的英文newline,
\r 换行, 本义是光标重新回到本行开头,r的英文return,
textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!
一般情况下,我们输入的数字、字母以及英文标点都是半角,所以占位无法确定。
EditText
String count = et_count.getText().toString().trim();
etPhoneNum.setText("");
或者etPhoneNum.getText().clear();
去掉edittext去边框 去下划线
EditText的background属性设置为@null就搞定了
android:background="@null" style属性倒是可加可不加
解决华为光标颜色设置无效的问题
android:textCursorDrawable="@drawable/edit_cursor"
android:imeOptions="normal"
切换可编辑与不可编辑
Android:editable // 是否可编辑
editText.setEnabled(true);可编辑
editText.setEnabled(false);不可编辑 ——// 字体颜色变灰色
如何让EditText的前5个文字不可编辑
如果是做外包一类项目可以参考用textview+edittext 实现;如果想钻研一下的话你研究下edittext的addTextChangeListener(new TextWathcer(){…})我觉得覆写OnTextChanged应该能达到你的需求!
切换编辑文本是否可见(星号密码格式)
isChecked = !isChecked;
// ToolUtils.i("密码是否可见 == "+isChecked);
if (isChecked){ //如果选中,显示密码
et_account.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}else { //否则隐藏密码
et_account.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
不让EditText自动获取焦点
解决之道:在EditText的父级控件中找一个,设置成
android:focusable="true"
android:focusableInTouchMode="true"
这样,就把EditText默认的行为截断了! http://zhidao.baidu.com/question/485331693.html ( 或者可参考这个说明 )
让EditText自动获得焦点
<EditText
android:id="@+id/et_string_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="input something ..." >
<requestFocus />
</EditText>
代码中实现的话,
if (TextUtils.isEmpty(username)) {
Toast.makeText(this, getResources().getString(R.string.User_name_cannot_be_empty), Toast.LENGTH_SHORT).show();
userNameEditText.requestFocus();
return;
}
EditText自动获取焦点时隐藏hint的代码
只需让EditText设置以下的OnFocusChangeListener就可以了
private OnFocusChangeListener mOnFocusChangeListener = new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus)
{
EditText editView = (EditText)v;
String hint;
if (hasFocus) {
hint = editView.getHint().toString();
editView.setTag(hint);
editView.setHint("");
} else {
hint = textView.getTag().toString();
editView.setHint(hint);
}
}
};
让光标移到末端
EditText et = ... String text = "text";
et.setText(text);
et.setSelection(text.length());
android:cursorVisible="false" 隐藏光标
android:background="#00000000"//不要文本框背景
edittext光标详解
edittext.requestFocusFromTouch();//让光标放入到点击位置。
edittext.requestFocus();//默认方式获得焦点
1.获取光标位置
int index = editText.getSelectionStart();
2.在光标处插入字符
int index = editText.getSelectionStart();
Editable editable = editText.getText();
editable.insert(index, "aaaa");
3.删除光标前字符
int index = editText.getSelectionStart();
Editable editable = editText.getText();
editable.delete(index-1, index);
EditText中android:cursorVisible属性的作用
设定光标为显示/隐藏,默认显示。如果设置false,即使选中了也不显示光标栏。
对于Android中的EditText来说,想要保持光标位于内容最后,
则要保证,先去设置了内容,然后才得到的焦点,即可;
否则先获得了焦点,后续再设置内容,此时焦点肯定是放在内容之前的了,则就需要额外调用setSelection去调整位置了。
【已解决】Android中EditText输入框焦点从文字前面变成文字后面(值得一看)(结论在最后!)
http://www.crifan.com/android_edittext_cursor_content_before_move_to_end_of_content/
一行高的框里面输入了两行文字
将edittext的高度设置成warpcontent,不要写成固定值;
<EditText
android:singleLine="false"
android:gravity="left"
android:maxLines="2" />
EditText对文本的监听
edittext.addTextChangedListener(new TextWatcher() { //对输入框中的内容监听、
EditText获取和失去焦点的监听
et_count.setOnFocusChangeListener(new OnFocusChangeListener() {
EditText searchView = (EditText) findViewById(R.id.search_text);
searchView.setOnFocusChangeListener(new android.view.View.
OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// 此处为得到焦点时的处理内容
} else {
// 此处为失去焦点时的处理内容
}
}
});
searchView = (EditText) findViewById(R.id.search_text);
searchView.setOnFocusChangeListener(new android.view.View.
OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// 此处为得到焦点时的处理内容
} else {
// 此处为失去焦点时的处理内容
}
}
});
searchView.setFocusable(true);
searchView.setFocusableInTouchMode(true);
searchView.requestFocus();
searchView.clearFocus();//失去焦点
searchView.requestFocus();//获取焦点
.setFocusable(true);
searchView.setFocusableInTouchMode(true);
searchView.requestFocus();
searchView.clearFocus();//失去焦点
searchView.requestFocus();//获取焦点
点击EditText文本框之外任何地方隐藏键盘的解决办法
重新百度,搜索方案。
EditText的常用属性---待整理
1、EditText输入的文字为密码形式的设置
只能输入密码,可以让EditText显示的内容自动为星号,输入时内容会在1秒内变成*字样。
(1)通过.xml里设置:
把该EditText设为:android:password="true" // 以”.”形式显示文本
android:password="true" 现在被android:inputType="textPassword" 这个代替
(2)在代码里设置:
通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码。
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());//设置密码为不可见。
2、android:numeric //只接受数字
android:numeric来控制输入的数字类型,android android:numeric="integer"
一共有三种分别为integer(正整数)、signed(带符号整数,有正负)和decimal(浮点数)。
4、EditText设置字体
android:typeface="monospace" //设置字型。字形有:normal, sans, serif,monospace
android:textStyle="bold" 字体,bold, italic, bolditalic android:textSize="20dip" 大小
2. 纯数字 android:numeric="true" 这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入
12、限定edittext能输入数字和字母,并且默认输入为数字,如身份证号码
android:inputType="number"
android:digits="0123456789xyzXYZ"
12、限定edittext能输入数字和字母,并且默认输入为数字,如身份证号码
android:inputType="number" android:digits="0123456789xyzXYZ"
android:capitalize = "characters" 以大写字母写
仅允许 android:capitalize="cwj1987" 这样仅允许接受输入cwj1987,一般用于密码验证 下面是一些扩展的风格属性
android:singleLine="true" 设置单行输入,一旦设置为true,则文字不会自动换行。——强制输入的内容在单行
android:textColorHint="#ffff00" 设置提示信息文字的颜色,默认为灰色 android:textScaleX="1.5" 控制字与字之间的间距
android:textAppearance="?android:attr/textAppearanceLargeInverse" 文字外观,这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。
10、Enter键图标的设置
软键盘的Enter键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:
(1)actionUnspecified未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED效果:
(2)actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE效果:
(3)actionGo去往,对应常量EditorInfo.IME_ACTION_GO 效果:
(4)actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH效果:
(5)actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND效果:
(6)actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT效果:
(7)actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE效果:
2. 纯数字 android:numeric="true" 这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入
2. 纯数字 android:numeric="true" 这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入