EditText

在设置界面布局的时候,设计师会给一张标注了尺寸的UI设计图,如果在UI中包含了TextView空间的话,会发现即使完全按照标注的尺寸来做,最终的显示效果和设计图还是有差异。

设置字重号,比如这种

android:textFontWeight="400"

打开开发者模式中的布局边界,再观察APP的界面可以发现,在TextView中字体与TextView的边界是有一定的距离的,在720px的图中大概有2px的边界留白。就是这些默认的留白导致UI出现偏差

在TextView提供的属性设置里面,有这样一条属性 android:includeFontPadding ,用来设置文本框是否包含顶部和底部留白(左右两侧默认没有留白),将其设置为false,TextView就会取消2px的留白。避免TextView导致UI出现差异

android:includeFontPadding="false" 清除TextView字体周边空白

Edittext光标放到最后

et.setText(content);//设置EditText控件的内容
et.setSelection(content.length());//将光标移至文字末尾

 如何让EditText不自动获取焦点

在项目中,一进入一个页面, EditText默认就会自动获取焦点。

那么如何取消这个默认行为呢?

在网上找了好久,有点 监听软键盘事件,有点 调用 clearFouse()方法,但是测试了都没有! xml中也找不到相应的属性可以关闭这个默认行

解决之道:在EditText的父级控件中找一个,设置成

   android:focusable="true"      android:focusableInTouchMode="true"这样,就把EditText默认的行为截断了!


Andr设置控件的透明度

android:alpha="0.5"
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 {
			// 此处为失去焦点时的处理内容
		}
	}
});

 设置EditText自动获取焦点并弹出输入法

// 获取编辑框焦点
editText.setFocusable(true);


//打开软键盘
InputMethodManager imm = (InputMethodManager)MainActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);


//关闭软键盘
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

 Android系统中TextView默认行间距比较窄,不美观。

我们可以设置每行的行间距,可以通过属性android:lineSpacingExtra或android:lineSpacingMultiplier来做。

在你要设置的TextView中加入如下代码:

1、android:lineSpacingExtra 
设置行间距,如”8dp”。

2、android:lineSpacingMultiplier 
设置行间距的倍数,如”1.5″。


通过获取控件上面的数字,进行拨打电话

phone_text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_DIAL);
                Uri data = Uri.parse("tel:" + phone_text.getText());
                intent.setData(data);
                startActivity(intent);
            }
        });

 实现textview最后一行只显示一半的效果 

这里写图片描述

不知道大家有没有接到过这种需求,textview要求最大3行,并且最后一行只显示一半,以省略号结尾

一开始觉得很蛋疼,一直没有好的思路,后来想到一种方案,就是用textview的paint可以计算出整个String的需要的宽度stringWidth,并且能计算出textview tvWidth的宽度
就可以推导出一个公式

line = stringWidth / tvWidth

这个line就是textview需要的行数

如果行数超过我们预期的行数,我们可以对String取子串

public static String getSubString(TextView tv, String content, int maxLine){
    float width = tv.getPaint().measureText(content);
    //这里只是为了方便,用屏幕宽度代替了textview控件宽度,如果需要精准控制,可以换成控件宽度
    float tvWidth = activity.getWindowManager().getDefaultDisplay().getWidth();
    if(width / tvWidth > (maxLine + 0.5)){
    return content.substring(0,(int)(content.length()/(width/tvWidth)/(maxLine + 0.5))) + "...";
    }
    return content;
}

这里写图片描述

如果你想要显示2.5行 就可以传入maxLine=2
如果想显示2.3行,就把方法里的0.5改成0.3


要控制EditText单行显示需要同时设置

android:singleLine="true"

和android:maxLines="1";

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <!-- 矩形的圆角弧度 -->
    <corners android:radius="8dp" />
    <!-- 矩形的填充色 -->
    <solid android:color="@color/black" />
    <!--<stroke-->
        <!--android:width="0.5dp"-->
        <!--android:color="#4eb621" />-->
</shape>


EditText 修改光标颜色和宽度

1.在资源文件drawable下新建一个光标控制color_cursor.xml

<?xml version="1.0" encoding="utf-8"?>  
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">  
    <size android:width="1dp" />  
    <solid android:color="#008000"  />  
</shape> 

2.设置EditText:android:textCursorDrawable=”@drawable/color_cursor”


TextView设置下划线、删除线 

private TextView textView;

textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);//下划线

textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);//删除线

textView.getPaint().setAntiAlias(true);//抗锯齿

TextView 实现复制文本功能

Android api 11 以后可以直接设置  android:textIsSelectable="true"

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="16sp"
        android:text="Hello World"
        android:gravity="center"
        android:textIsSelectable="true"
        />

设置EditText只能输入小数点后两位,在价格等有限制的输入时特别有效

//设置EditText只能输入小数点后两位,在价格等有限制的输入时特别有效
    private void setTextChanged(EditText editText) {
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                        s = s.toString().subSequence(0, s.toString().indexOf(".") + 3);
                        editText.setText(s);
                        editText.setSelection(s.length());
                    }
                }
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    editText.setText(s);
                    editText.setSelection(2);
                }
                if (s.toString().startsWith("0") && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                        editText.setText(s.subSequence(0, 1));
                        editText.setSelection(1);
                        return;
                    }
                }
                data_result.setText("");
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值