Android开发之EditText属性详解+++ImageView的属性

 

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的数字输入

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值