安卓中的contextbutton可以发送char型吗

AS3的栅格化影片剪辑成雪碧印刷
我目前有一个问题,打印多页基本上我有一个影片剪辑在舞台上(printArea中),其中包含多个包括图像A和其他杂七杂八
这个影片剪辑作为单个页面的模板;您的选项,然后单击“添加页面”,并再次改变它的第二页等。我遇到的问题是与页面添加到数组通过addPage被环()。据我了解,一个sprites或影片剪辑将是最好的传递对addPage。我觉得这是总矫枉过正复制的影片剪辑,然后重新初始化数据 CodeGo.net,尺寸和定位套。我无法通过影片剪辑本身,因为我需要从一个实例为蓝本好几页。有没有办法简单地栅格化影片剪辑将它传递对addPage()?这是我现在已经找到的唯一解决方案,但打印质量更是苦不堪言:
//So let's say I want to add the movie clip's current state to the array :
multiPages.push(duplicateMC(printArea));
function duplicateMC(mc)
var tempImg:BitmapData = new BitmapData(mc.width,mc.height);
tempImg.draw(mc);
var fullImg = new Bitmap(tempImg);
var newImg = DisplayConverter.bitmapToSprite(fullImg,true);
multiPages.push(newImg);
//DisplayConverter function in a seperate file (Snagged this online somewhere) :
public static function bitmapToSprite(bitmap:Bitmap, smoothing:Boolean = false):Sprite
var sprite:Sprite = new Sprite();
sprite.addChild( new Bitmap(bitmap.bitmapData.clone(), "auto", smoothing));
在此先感谢,这已经是一个巨大的痛苦一整天。
本文地址 :CodeGo.net/2635885/
-------------------------------------------------------------------------------------------------------------------------
1.不要吧。
你是不结垢,所以不要启用捕捉或平滑,因为这会扭曲的形象,降低质量。
存放“图像/骨密度”在你的数组是指回到它在印刷
存储更多的则是骨密度
function doMyPrinting( ):void{
for each( var item:BitmapData in multiPages){
var page:Sprite = new Sprite();
page.addChild(new Bitmap(item));
printJob.addPage(page);
multiPages.push(duplicateMC(printArea));
function duplicateMC(mc):void
var tempImg:BitmapData = new BitmapData(mc.width,mc.height);
tempImg.draw(mc);
multiPages.push(tempImg);
本文标题 :AS3的栅格化影片剪辑成雪碧印刷
本文地址 :CodeGo.net/2635885/
Copyright (C) 2014 CodeGo.net 沪ICP备号 联&系& c&o&d&e&g&o &@&1&2&6&.&c&o&mAndroid 上传图片到服务器
界面很简单,点击 【选择图片】,从图库里选择图片,显示到下面的imageview里,点击上传,就会上传到指定的服务器
布局文件:
&?xml version=&1.0& encoding=&utf-8&?& &
&LinearLayout xmlns:android=&/apk/res/android& &
& & android:orientation=&vertical& &
& & android:layout_width=&fill_parent& &
& & android:layout_height=&fill_parent& &
& & &Button & &
& & android:layout_width=&fill_parent& &&
& & android:layout_height=&wrap_content& &&
& & android:text=&选择图片& &
& & android:id=&@+id/selectImage& &
& & &Button & &
& & android:layout_width=&fill_parent& &&
& & android:layout_height=&wrap_content& &&
& & android:text=&上传图片& &
& & android:id=&@+id/uploadImage& &
& & &&ImageView & &
& & android:layout_width=&wrap_content& &&
& & android:layout_height=&wrap_content& &&
& & android:id=&@+id/imageView& &
&/LinearLayout& &
Upload Activity:
public class Upload extends Activity implements OnClickListener { &
& & private static String requestURL = &http://192.168.1.212:8011/pd/upload/fileUpload.do&; &
& & private Button selectImage, uploadI &
& & private ImageView imageV &
& & private String picPath = &
& & /** Called when the activity is first created. */ &
& & @Override &
& & public void onCreate(Bundle savedInstanceState) { &
& & & & super.onCreate(savedInstanceState); &
& & & & setContentView(R.layout.upload); &
& & & & selectImage = (Button) this.findViewById(R.id.selectImage); &
& & & & uploadImage = (Button) this.findViewById(R.id.uploadImage); &
& & & & selectImage.setOnClickListener(this); &
& & & & uploadImage.setOnClickListener(this); &
& & & & imageView = (ImageView) this.findViewById(R.id.imageView); &
& & @Override &
& & public void onClick(View v) { &
& & & & switch (v.getId()) { &
& & & & case R.id.selectImage: &
& & & & & & /***&
& & & & & & &* 这个是调用android内置的intent,来过滤图片文件 ,同时也可以过滤其他的&
& & & & & & &*/ &
& & & & & & Intent intent = new Intent(); &
& & & & & & intent.setType(&image/*&); &
& & & & & & intent.setAction(Intent.ACTION_GET_CONTENT); &
& & & & & & startActivityForResult(intent, 1); &
& & & & & & &
& & & & case R.id.uploadImage: &
& & & & & & if (picPath == null) { &
& & & & & & & & Toast.makeText(Upload.this, &请选择图片!&, 1000).show(); &
& & & & & & } else { &
& & & & & & & & final File file = new File(picPath); &
& & & & & & & & if (file != null) { &
& & & & & & & & & & String request = UploadUtil.uploadFile(file, requestURL); &
& & & & & & & & & & uploadImage.setText(request); &
& & & & & & & & } &
& & & & & & } &
& & & & & & &
& & & & default: &
& & & & & & &
& & & & } &
& & @Override &
& & protected void onActivityResult(int requestCode, int resultCode, Intent data) { &
& & & & if (resultCode == Activity.RESULT_OK) { &
& & & & & & /** &
& & & & & & &* 当选择的图片不为空的话,在获取到图片的途径 &
& & & & & & &*/ &
& & & & & & Uri uri = data.getData(); &
& & & & & & Log.e(TAG, &uri = & + uri); &
& & & & & & try { &
& & & & & & & & String[] pojo = { MediaStore.Images.Media.DATA }; &
& & & & & & & & Cursor cursor = managedQuery(uri, pojo, null, null, null); &
& & & & & & & & if (cursor != null) { &
& & & & & & & & & & ContentResolver cr = this.getContentResolver(); &
& & & & & & & & & & int colunm_index = cursor &
& & & & & & & & & & & & & & .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); &
& & & & & & & & & & cursor.moveToFirst(); &
& & & & & & & & & & String path = cursor.getString(colunm_index); &
& & & & & & & & & & /***&
& & & & & & & & & & &* 这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了,&
& & & & & & & & & & &* 这样的话,我们判断文件的后缀名 如果是图片格式的话,那么才可以&
& & & & & & & & & & &*/ &
& & & & & & & & & & if (path.endsWith(&jpg&) || path.endsWith(&png&)) { &
& & & & & & & & & & & & picPath = &
& & & & & & & & & & & & Bitmap bitmap = BitmapFactory.decodeStream(cr &
& & & & & & & & & & & & & & & & .openInputStream(uri)); &
& & & & & & & & & & & & imageView.setImageBitmap(bitmap); &
& & & & & & & & & & } else { &
& & & & & & & & & & & & alert(); &
& & & & & & & & & & } &
& & & & & & & & } else { &
& & & & & & & & & & alert(); &
& & & & & & & & } &
& & & & & & } catch (Exception e) { &
& & & & & & } &
& & & & } &
& & & & super.onActivityResult(requestCode, resultCode, data); &
& & private void alert() { &
& & & & Dialog dialog = new AlertDialog.Builder(this).setTitle(&提示&) &
& & & & & & & & .setMessage(&您选择的不是有效的图片&) &
& & & & & & & & .setPositiveButton(&确定&, new DialogInterface.OnClickListener() { &
& & & & & & & & & & public void onClick(DialogInterface dialog, int which) { &
& & & & & & & & & & & & picPath = &
& & & & & & & & & & } &
& & & & & & & & }).create(); &
& & & & dialog.show(); &
这个才是重点 UploadUtil:
public class UploadUtil { &
& & private static final String TAG = &uploadFile&; &
& & private static final int TIME_OUT = 10 * 1000; // 超时时间 &
& & private static final String CHARSET = &utf-8&; // 设置编码 &
& & &* 上传文件到服务器&
& & &* @param file 需要上传的文件&
& & &* @param RequestURL 请求的rul&
& & &* @return 返回响应的内容&
& & public static int uploadFile(File file, String RequestURL) { &
& & & & int res=0; &
& & & & String result = &
& & & & String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成 &
& & & & String PREFIX = &--&, LINE_END = &\r\n&; &
& & & & String CONTENT_TYPE = &multipart/form-data&; // 内容类型 &
& & & & try { &
& & & & & & URL url = new URL(RequestURL); &
& & & & & & HttpURLConnection conn = (HttpURLConnection) url.openConnection(); &
& & & & & & conn.setReadTimeout(TIME_OUT); &
& & & & & & conn.setConnectTimeout(TIME_OUT); &
& & & & & & conn.setDoInput(true); // 允许输入流 &
& & & & & & conn.setDoOutput(true); // 允许输出流 &
& & & & & & conn.setUseCaches(false); // 不允许使用缓存 &
& & & & & & conn.setRequestMethod(&POST&); // 请求方式 &
& & & & & & conn.setRequestProperty(&Charset&, CHARSET); // 设置编码 &
& & & & & & conn.setRequestProperty(&connection&, &keep-alive&); &
& & & & & & conn.setRequestProperty(&Content-Type&, CONTENT_TYPE + &;boundary=&+ BOUNDARY); &
& & & & & & if (file != null) { &
& & & & & & & & /**&
& & & & & & & & &* 当文件不为空时执行上传&
& & & & & & & & &*/ &
& & & & & & & & DataOutputStream
= new DataOutputStream(conn.getOutputStream()); &
& & & & & & & & StringBuffer sb = new StringBuffer(); &
& & & & & & & & sb.append(PREFIX); &
& & & & & & & & sb.append(BOUNDARY); &
& & & & & & & & sb.append(LINE_END); &
& & & & & & & & /**&
& & & & & & & & &* 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件&
& & & & & & & & &* filename是文件的名字,包含后缀名&
& & & & & & & & &*/ &
& & & & & & & & sb.append(&Content-Disposition: form- name=\&file\&; filename=\&& &
& & & & & & & & & & & & + file.getName() + &\&& + LINE_END); &
& & & & & & & & sb.append(&Content-Type: application/octet- charset=& &
& & & & & & & & & & & & + CHARSET + LINE_END); &
& & & & & & & & sb.append(LINE_END); &
& & & & & & & & dos.write(sb.toString().getBytes()); &
& & & & & & & & InputStream is = new FileInputStream(file); &
& & & & & & & & byte[] bytes = new byte[1024]; &
& & & & & & & & int len = 0; &
& & & & & & & & while ((len = is.read(bytes)) != -1) { &
& & & & & & & & & & dos.write(bytes, 0, len); &
& & & & & & & & } &
& & & & & & & & is.close(); &
& & & & & & & & dos.write(LINE_END.getBytes()); &
& & & & & & & & byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END) &
& & & & & & & & & & & & .getBytes(); &
& & & & & & & & dos.write(end_data); &
& & & & & & & & dos.flush(); &
& & & & & & & & /**&
& & & & & & & & &* 获取响应码 200=成功 当响应成功,获取响应的流&
& & & & & & & & &*/ &
& & & & & & & & &res = conn.getResponseCode(); &
& & & & & & & & Log.e(TAG, &response code:& + res); &
& & & & & & & & if (res == 200) { &
& & & & & & & & & & Log.e(TAG, &request success&); &
& & & & & & & & & & InputStream input = conn.getInputStream(); &
& & & & & & & & & & StringBuffer sb1 = new StringBuffer(); &
& & & & & & & & & & &
& & & & & & & & & & while ((ss = input.read()) != -1) { &
& & & & & & & & & & & & sb1.append((char) ss); &
& & & & & & & & & & } &
& & & & & & & & & & result = sb1.toString(); &
& & & & & & & & & & Log.e(TAG, &result : & + result); &
& & & & & & & & } else { &
& & & & & & & & & & Log.e(TAG, &request error&); &
& & & & & & & & } &
& & & & & & } &
& & & & } catch (MalformedURLException e) { &
& & & & & & e.printStackTrace(); &
& & & & } catch (IOException e) { &
& & & & & & e.printStackTrace(); &
& & & & } &
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。您现在正在浏览:
安卓android开发使用TextView/EditText应该注意的地方
发布时间:
17:31:50 &
浏览次数:
摘要: 或者这个:android:maxLength来设置输入的最大长度控制输入小数的位数Java代码//设置小数位数控制。Andro...
android开发使用TextView/EditText应该注意的地方
关于android软键盘enter键的替换与事件监听
软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有normal,actionUnspecified,actionNone,actionGo,actionSearch,actionSend,actionNext,actionDone,例如当值为actionNext时enter键外观变成一个向下箭头,而值为actionDone时enter键外观则变成了“完成”两个字。
我们也可以重写enter的事件,方法如下:
Java代码
TextView editText = new TextView(this);
editText.setOnEditorActionListene(
newTextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event){
if (actionId == EditorInfo.IME_ACTION_SEND)
// 在这里编写自己想要实现的功能
TextView editText = new TextView(this);editText.setOnEditorActionListene(newTextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event){
if (actionId == EditorInfo.IME_ACTION_SEND)
// 在这里编写自己想要实现的功能
});
另附:拦截HOME按键
Android如何显示音标
/archives/4087
EditText设置光标位置问题
EditText中有一些预置文本的时候,想把光标调到最前面,一开始是使用的setSelection(0),结果发现在三星P1000上面有问题。经过研究发现需要先调用EditText.requestFocus(),再调用setSelection(0)。否则的话,在2.x的机器上有问题,但3.x上面是好着的。
EditText横屏时,弹出软件盘时不进行全屏
在使用EditText进行文本输入时,若不进行特殊的设置,使用Android自带的软键盘,该软键盘会占用整个界面,那么,如何让键盘只占用屏幕的一部分呢?
Xml代码
android:id=&@+id/text1&
android:layout_width=&150dip&
android:layout_height=&wrap_content&
android:imeOptions=&flagNoExtractUi&/&
&EditText android:id=&@+id/text1& android:layout_width=&150dip& android:layout_height=&wrap_content&android:imeOptions=&flagNoExtractUi&/&
使用android:imeOptinos可对Android自带的软键盘进行一些界面上的设置:
Xml代码
android:imeOptions=&flagN&p&[NextPage][/NextPage]&/p&oExtractUi&
//使软键盘不全屏显示,只占用一部分屏幕
同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键
android:imeOptions=&actionNone&
//输入框右侧不带任何提示
android:imeOptions=&actionGo&
//右下角按键内容为&开始&
android:imeOptions=&actionSearch&
//右下角按键为放大镜图片,搜索
android:imeOptions=&actionSend&
//右下角按键内容为&发送&
android:imeOptions=&actionNext&
//右下角按键内容为&下一步&
android:imeOptions=&actionDone&
//右下角按键内容为&完成&
android:imeOptions=&flagNoExtractUi&
//使软键盘不全屏显示,只占用一部分屏幕同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键android:imeOptions=&actionNone&
//输入框右侧不带任何提示android:imeOptions=&actionGo&
//右下角按键内容为&开始&android:imeOptions=&actionSearch&
//右下角按键为放大镜图片,搜索android:imeOptions=&actionSend&
//右下角按键内容为&发送&android:imeOptions=&actionNext&
//右下角按键内容为&下一步&android:imeOptions=&actionDone&
//右下角按键内容为&完成&
同时,可能EditText添加相应的监听器,捕捉用户点击了软键盘右下角按钮的监听事件,以便进行处理。
Java代码
editText.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Toast.makeText(MainActivity.this, &text2&, Toast.LENGTH_SHORT).show();
editText.setOnEditorActionListener(new OnEditorActionListener() {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {Toast.makeText(MainActivity.this, &text2&, Toast.LENGTH_SHORT).show();}});
在TextView控件中单击链接弹出Activity
http://blog.csdn.net/nokiaguy/article/details/6835916
Android使用TextView实现无下划线超链接
/android-textview-no-underline-hyperlink/
文本框实现搜索和清空效果
/blog/1114592
为TextView添加阴影
values/styles
Xml代码
&style name=&AudioFileInfoOverlayText&&
&item name=&android:paddingLeft&&4px&/item&
&item name=&android:paddingBottom&&4px&/item&
&item name=&android:textColor&&#ffffffff&/item&
&item name=&android:textSize&&12sp&/item&
&item name=&android:shadowColor&&#ff00ff00&/item&
&item name=&android:shadowDx&&5&/item&
&item name=&android:shadowDy&&3&/item&
&p&[NextPage][/NextPage]&/p&
&item name=&android:shadowRadius&&6&/item&
&TextView android:id=&@+id/info&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
style=&@style/AudioFileInfoOverlayText&
android:text=&aaaa&
android:gravity=&center& /&
&style name=&AudioFileInfoOverlayText&& &item name=&android:paddingLeft&&4px&/item& &item name=&android:paddingBottom&&4px&/item& &item name=&android:textColor&&#ffffffff&/item& &item name=&android:textSize&&12sp&/item& &item name=&android:shadowColor&&#ff00ff00&/item& &item name=&android:shadowDx&&5&/item& &item name=&android:shadowDy&&3&/item& &item name=&android:shadowRadius&&6&/item&&/style&&TextView android:id=&@+id/info& android:layout_width=&fill_parent& android:layout_height=&wrap_content& style=&@style/AudioFileInfoOverlayText& android:text=&aaaa& android:gravity=&center& /&
如何将TextView中的中文设置成粗体?
在xml文件中使用android:textStyle=&bold& 可以将英文设置成粗体,但是不能将中文设置成粗体,将中文设置成粗体的方法是:
TextView tv = (TextView)findViewById(R.id.TextView01);
TextPaint tp = tv.getPaint();
tp.setFakeBoldText(true);
其他还有:
textView.PLEX_UNIT_SP, 24f);//设置成24sp
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//可能中文加粗无效
textView.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));//可能中文无效
textView.setText(Html.fromHtml(&&u&&+texts[i]+&&/u&&));//下划线
textView.setTypeface(Typeface.MONOSPACE,Typeface.ITALIC);//斜体,中文有效
textView.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG );//中间加横线
textView.getPaint().setFlags(Paint. UNDERLINE_TEXT_FLAG );//底部加横线
ellipsize和lines
Xml代码
&TextView android:id=&@+id/tv&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:textColor=&#FF00FF00&
android:textSize=&20px&
android:lines=&4&
android:ellipsize=&end&
android:text=&Automatic Target Mode: using existing emulator running compatible AVD.Application already deployed. No need to reinstall.Application already deployed. No need to reinstall.Application already deployed. No need to reinstall&
&TextView android:id=&@+id/tv&android:layout_wi&p&[NextPage][/NextPage]&/p&dth=&fill_parent&android:layout_height=&wrap_content&android:textColor=&#FF00FF00&android:textSize=&20px&android:lines=&4&android:ellipsize=&end&android:text=&Automatic Target Mode: using existing emulator running compatible AVD.Application already deployed. No need to reinstall.Application already deployed. No need to reinstall.Application already deployed. No need to reinstall&/&
不要将ellipsize和lines一起使用,否则会让人疑惑。像上面的代码会显示几行文字呢?
android:lines感觉是用于显示文字的行数,事实上是不确切的。假如文字不满足够的行数呢?android:lines更适合用于设置TextView的高度,像上面的代码指定了TextView的高度可以显示4行文字,如果文字不满4行,则TextView仍旧显示4行的高度!
android:ellipsize用于当文字过长时缩略显示,默认会缩略显示2行!如果和android:singleLine=&true&一起使用则显示一行;但不要以为和android:lines=&4&或和android:maxLines=&4&一起使用会显示4行,当试验过了才知道仍然显示2行!
如何对EditText输入字数做限制?
Java代码
private EditText mEditT
= (EditText) findViewById(R.id.mEditText );
/** 限制字数 */
.addTextChangedListener(new TextWatcher() {
private CharS
private int selectionS
private int selectionE
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
public void afterTextChanged(Editable s) {
selectionStart = mEditText
.getSelectionStart();
selectionEnd = mEditText
.getSelectionEnd();
Log.d(TAG,&&+selectionStart);
if (temp.length() & 8) {
Toast.makeText(MAUpdateAty.this, &字数不能超过8个&, Toast.LENGTH_SHORT).show();
s.delete(selectionStart-1, selectionEnd);
int tempSelection = selectionS
&p&[NextPage][/NextPage]&/p&
.setText(s);
.setSelection(tempSelection);
Log.d(TAG,& &+selectionEnd);
private EditText mEditTmEditText
= (EditText) findViewById(R.id.mEditText );/** 限制字数 */mEditText
.addTextChangedListener(new TextWatcher() {private CharS
private int selectionS
private int selectionE@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {temp = }@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {} @Overridepublic void afterTextChanged(Editable s) {selectionStart = mEditText
.getSelectionStart();
selectionEnd = mEditText
.getSelectionEnd();
Log.d(TAG,&&+selectionStart);
if (temp.length() & 8) {
Toast.makeText(MAUpdateAty.this, &字数不能超过8个&, Toast.LENGTH_SHORT).show();
s.delete(selectionStart-1, selectionEnd);
int tempSelection = selectionS
.setText(s);
.setSelection(tempSelection);
} Log.d(TAG,& &+selectionEnd);}});
或者试试这个:
Java代码
private TextWatcher mTextWatcher = new TextWatcher(){
Toast mToast =
public void beforeTextChanged(CharSequence s, int start,
int count,int after) {
public void onTextChanged(CharSequence s, int start,
int before,int count) {
public void afterTextChanged(Editable s) {
int nSelStart = 0;
int nSelEnd = 0;
boolean nOverMaxLength =
nSelStart = mEditText.getSelectionStart();
= mEditText.getSelectionEnd();
nOverMaxLength = (s.le&p&[NextPage][/NextPage]&/p&ngth() & Constants.MAX_TEXT_INPUT_LENGTH)
if(nOverMaxLength){
if(null == mToast){
mToast = Toast.makeText(mContext,
R.string.IDS_MSG_TEXT_OVER_MAXLENGTH,
Toast.LENGTH_SHORT);
mToast.show();
s.delete(nSelStart - 1, nSelEnd);
mEditText.setTextKeepState(s);//请读者注意这一行,保持光标原先的位置,而 mEditText.setText(s)会让光标跑到最前面,就算是再加mEditText.setSelection(nSelStart) 也不起作用
private TextWatcher mTextWatcher = new TextWatcher(){Toast mToast =public void beforeTextChanged(CharSequence s, int start, int count,int after) {}public void onTextChanged(CharSequence s, int start, int before,int count) {}public void afterTextChanged(Editable s) {int nSelStart = 0;int nSelEnd = 0;boolean nOverMaxLength =nSelStart = mEditText.getSelectionStart();nSelEnd
= mEditText.getSelectionEnd();nOverMaxLength = (s.length() & Constants.MAX_TEXT_INPUT_LENGTH)
true :if(nOverMaxLength){if(null == mToast){mToast = Toast.makeText(mContext, R.string.IDS_MSG_TEXT_OVER_MAXLENGTH, Toast.LENGTH_SHORT);}mToast.show();s.delete(nSelStart - 1, nSelEnd);mEditText.setTextKeepState(s);//请读者注意这一行,保持光标原先的位置,而 mEditText.setText(s)会让光标跑到最前面,就算是再加mEditText.setSelection(nSelStart) 也不起作用}}};
或者试试这个:
用代码控制,可以用InputFilter限定20个字符:
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});
或者这个:
android:maxLength来设置输入的最大长度
控制输入小数的位数
Java代码
// 设置小数位数控制
InputFilter lengthfilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// 删除等特殊字符,直接返回
if (&&.equals(source.toString())) {
String dValue = dest.toString();
String[] splitArray = dValue.split(&\\.&);
if (splitArray.length & 1) {
String dotValue = splitArray[1];
int diff = dotValue.length() + 1 - digL
&p&[NextPage][/NextPage]&/p&
if (diff & 0) {
return source.subSequence(start, end - diff);
inputEdit.setFilters(new InputFilter[] { lengthfilter });
// 设置小数位数控制InputFilter lengthfilter = new InputFilter() {public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) {// 删除等特殊字符,直接返回if (&&.equals(source.toString())) {}String dValue = dest.toString();String[] splitArray = dValue.split(&\\.&);if (splitArray.length & 1) {String dotValue = splitArray[1];int diff = dotValue.length() + 1 - digLif (diff & 0) {return source.subSequence(start, end - diff);}}}};inputEdit.setFilters(new InputFilter[] { lengthfilter });
一 . 设置焦点
如果在单击某个 EditText 的时候想让其他的 EditText 获得输入的焦点,那么可以使用下面的语句,
Java代码
getCurrentFocus().setFocusable(false);
getCurrentFocus().setFocusableInTouchMode(false);
getCurrentFocus().setFocusable(false);getCurrentFocus().setFocusableInTouchMode(false);
而要获得焦点的 EditText :
Java代码
mSearchEdit.setFocusable(true);
mSearchEdit.setFocusableInTouchMode(true);
mSearchEdit.requestFocus();
mSearchEdit.setFocusable(true);mSearchEdit.setFocusableInTouchMode(true);mSearchEdit.requestFocus();
二 . 设置输入格式过滤器
为 EditText 设置输入的过滤器。InputFilter, 首先要注意的是对一个 EditText 的对象设置 setFilters(InputFilter[] filters) ,其参数是一个 inputFilter 数组,即对一个 EditText 你可以同时设置多个输入过滤器。而我们平时用的时候一般设置一个过滤器就可以了,所以可以作如下使用(以输入数字为例):
InputFilter[] mDigitsFilters = new InputFilter[1];
mDigitsFilters[0] = new DigitsKeyListener(true, true);
ps: DigitsKeyListener 第一个参数是 Sign, 如果设置为 true ,表示允许在数字最左端有负号,否则只能输入正数;第二个参数是 decimal, 如果设置为 true, 表示允许在数字中有一个小数点存在。
最后 setFilters(mDigitsFilters); 就 OK 了,
InputFilter 是一个接口,其实现的子类有:
DateKeyListener, DateTimeKeyListener, DialerKeyListener, DigitsKeyListener, InputFilter.AllCaps, InputFilter.LengthFilter, LoginFilter, LoginFilter.PasswordFilterGMail, LoginFilter.UsernameFilterGMail, LoginFilter.UsernameFil&p&[NextPage][/NextPage]&/p&terGeneric,
NumberKeyListener, TimeKeyListener
DateKeyListener
For entering dates in a text field.
DateTimeKeyListener
For entering dates and times in the same text field.
DialerKeyListener
For dialing-only text entry
DigitsKeyListener
For digits-only text entry
InputFilter.AllCaps
This filter will capitalize all the lower case letters that are added through edits.
InputFilter.LengthFilter
This filter will constrain edits not to make the length of the text greater than the specified length.
LoginFilter
Abstract class for filtering login-related text (user names and passwords)
LoginFilter.PasswordFilterGMail
This filter is compatible with GMail passwords which restricts characters to the Latin-1 (ISO8859-1) char set.
LoginFilter.UsernameFilterGMail
This filter rejects characters in the user name that are not compatible with GMail account creation.
LoginFilter.UsernameFilterGeneric
This filter rejects characters in the user name that are not compatible with Google login.
NumberKeyListener
For numeric text entry
TimeKeyListener
For entering times in a text field.
根据解释应该不难理解,根据你自己的需要选择吧。
实例:
EditText与InputFilter实现文本对比
此功能类似于临摹。已知被临摹的字符串,将字符串与EditText中输入进行
对比,输入错误,则用“×”替换所输入的字符。
Java代码
import android.app.A
import android.os.B
import android.text.InputF
import android.text.S
import android.util.L
import android.widget.EditT
import android.widget.TextV
import android.widget.T
public class MyFilterTest extends Activity {
/** Called when the activity is first created. */
TextView myT
EditText myE
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String str = &Hello,Android!&;
myText=(TextView)findViewById(R.id.myText);
myText.setText(str);
myEdit=(EditText)findViewById(R.id.myEdit);
myEdit.setFilters(new InputFilter[]{ new MyInputFilter(str) });
public class MyInputFilter implements InputFilter{
String str=
&p&[NextPage][/NextPage]&/p&
public MyInputFilter(String str){
public CharSequence filter(CharSequence src, int start, int end,
Spanned dest, int dstart, int dend) {
// TODO Auto-generated method stub
String ch=
String TAG=&Filter&;
Log.w(TAG,&src:&+src+&;start:&+start+&;end:&+end);
Log.w(TAG,&dest:&+dest+&;dstart:&+dstart+&;dend:&+dend);
if(dest.length()&str.length()){
ch=str.substring(dstart+start, dstart+end);
return dest.subSequence(dstart, dend);
if(ch.equals(src)){
Toast.makeText(MyFilterTest.this, &match&, Toast.LENGTH_SHORT).show();
return dest.subSequence(dstart, dend)+src.toString();
Toast.makeText(MyFilterTest.this, &mismatch&, Toast.LENGTH_SHORT).show();
return dest.subSequence(dstart, dend)+&×&;
import android.app.Aimport android.os.Bimport android.text.InputFimport android.text.Simport android.util.Limport android.widget.EditTimport android.widget.TextVimport android.widget.Tpublic class MyFilterTest extends Activity {/** Called when the activity is first created. */TextView myTEditText myE@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);final String str = &Hello,Android!&;myText=(TextView)findViewById(R.id.myText);myText.setText(str);myEdit=(EditText)findViewById(R.id.myEdit);myEdit.setFilters(new InputFilter[]{ new MyInputFilter(str) });}public class MyInputFilter implements InputFilter{String str=public MyInputFilter(String str){this.str=}@Overridepublic CharSequence filter(CharSequence src, int start, int end,Spanned dest, int dstart, int dend) {// TODO Auto-generated method stubString ch=String TAG=&Filter&;Log.w(TAG,&src:&+src+&;start:&+start+&;end:&+end);Log.w(TAG,&dest:&+dest+&p&[NextPage][/NextPage]&/p&&;dstart:&+dstart+&;dend:&+dend);if(dest.length()&str.length()){ch=str.substring(dstart+start, dstart+end);}else{return dest.subSequence(dstart, dend);}if(ch.equals(src)){Toast.makeText(MyFilterTest.this, &match&, Toast.LENGTH_SHORT).show();return dest.subSequence(dstart, dend)+src.toString();}else{Toast.makeText(MyFilterTest.this, &mismatch&, Toast.LENGTH_SHORT).show();return dest.subSequence(dstart, dend)+&×&;}}
}}
参见其他:
http://www.blogjava.net/improviser/archive//337501.html
http://wang-/blog/1022523
如何设置EditText隐藏键盘 ?
Java代码
(EditText)mMarket.setInputType(0);
(EditText)mMarket.setInputType(0);
如何设置EditText不被输入法遮盖 ?
Java代码
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
如何解决软键盘弹出引起的各种不适
如何隐藏Activity刚进来焦点在EditText时显示输入键盘?
一个Activity刚进来时焦点在EditText时,会弹出输入的键盘,这不是我想要的,然后就想办法隐藏掉输入键盘。尝试了EditText的clearFocus不行,也试过其它控件ruquestFocus也不行,用隐藏键盘的方法/blog/548642
不行。试试下面这种:
Java代码
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
这个方法的意思是,只有点击EditText时才会弹出输入键盘。
TextView实现多行本文滚动
Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟ScrollView必须只能有一个直接的子类布局。只要在layout中简单设置几个属性就可以轻松实现
&TextView
android:id=&@+id/tvCWJ&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:scrollbars=&vertical&
&!--垂直滚动条 --&
android:singleLine=&false&
&!--实现多行 --&
android:maxLines=&15&
&!--最多不超过15行 --&
android:textColor=&#FF0000&
/&
当然我们为了让TextView动起来,还需要用到TextView的setMovementMethod方法设置一个滚动实例,代码如下
TextView tv = (TextView)findViewById(R.id.tvCWJ);
tv.setMovementMethod(ScrollingMovementMethod.getInstance());
android实现TextView垂直或水平滚动
&p&[NextPage][/NextPage]&/p&设置EditText显示或隐藏密码
Java代码
if (isChecked) {
System.out.println(&checked&);
// 显示密码
password_edit.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
System.out.println(&not checked&);
// 隐藏密码
password_edit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
if (isChecked) {System.out.println(&checked&);// 显示密码password_edit.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } else {System.out.println(&not checked&);// 隐藏密码password_edit.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);}
EditView小写转大写
Java代码
final EditText input = new EditText(this);
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.AllCaps();
input.setFilters(FilterArray);
final EditText input = new EditText(this);InputFilter[] FilterArray = new InputFilter[1];FilterArray[0] = new InputFilter.AllCaps();input.setFilters(FilterArray);
阻止EditText一开始就获得焦点
程序在加载视图时总是会把输入的焦点自动移动到第一个输入框(这样导致在某些机器上程序一启动就弹出输入法框,很是不爽),如何让他不获得焦点呢
EditText.setSelected(false);
上述命令是不行的。
clearFocus() 才是可以的。
如果你是用AutoCompleteTextView
Xml代码
&!-- Dummy item to prevent AutoCompleteTextView from receiving focus --&
&!--最简单的方法是在TextView的父容器(通常是LinearLayout)中设置android:focusable=&true& android:focusableInTouchMode=&true&,这样就把焦点从EditText上移走了。--&
&LinearLayout
android:focusable=&true& android:focusableInTouchMode=&true&
android:layout_width=&0px& android:layout_height=&0px&&
&!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again --&
&AutoCompleteTextView android:id=&@+id/text&
android:layout_width=&fill_parent& android:layout_height=&wrap_content&
android:nextFocusUp=&@+id/text& android:nextFocusLeft=&@+id/text&/&
&/LinearLayout&
&!-- Dummy item to prevent AutoCompleteTextView from receiving focus --&&!--最简单的方法是在TextView的父容器(通常是LinearLayout)中设置android:focusable=&true& android:focusableInTouchMode=&true&,这样就把焦点从EditText上&p&[NextPage][/NextPage]&/p&移走了。--&&LinearLayoutandroid:focusable=&true& android:focusableInTouchMode=&true&android:layout_width=&0px& android:layout_height=&0px&&&!-- :nextFocusUp and :nextFocusLeft have been set to the id of this componentto prevent the dummy from receiving focus again --&&AutoCompleteTextView android:id=&@+id/text&android:layout_width=&fill_parent& android:layout_height=&wrap_content&android:nextFocusUp=&@+id/text& android:nextFocusLeft=&@+id/text&/&&/LinearLayout&
彻底隐藏软键盘
Java代码
EditText et=(EditText)findViewById(R.id.edit);
et.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);
EditText et=(EditText)findViewById(R.id.edit);et.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);
tv.setCompoundDrawables()不起作用?
Java代码
Drawable leftD
leftDrawable= getResources().getDrawable(R.drawable.left_drawable);
// user setCompoundDrawables()
method , you must call Drawable.setBounds()
method !Or
the Image can&t show .
leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());
mTextView.setCompoundDrawables(leftDrawable, null, null, null);
Drawable leftDleftDrawable= getResources().getDrawable(R.drawable.left_drawable);// user setCompoundDrawables()
method , you must call Drawable.setBounds()
method !Or
the Image can&t show .leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());mTextView.setCompoundDrawables(leftDrawable, null, null, null);
其实就是android:drawableLeft=&@drawable/icon&啦!
Enter键图标的设置
软键盘的Enter键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:
Xml代码
android:id=&@+id/edit_text&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:imeOptions=&actionSearch&/&
android:id=&@+id/edit_text&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:imeOption&p&[NextPage][/NextPage]&/p&s=&actionSearch&/&
EditText的取值、全选、部分选择、获取选中文本
下面通过一个例子来演示EditText的取值、全选、部分选择和获取选中文本.main.xml如下:
Xml代码
&xml version=&1.0& encoding=&utf-8&&
&LinearLayout xmlns:android=&/apk/res/android&
android:orientation=&vertical&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:id=&@+id/edit_text&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:imeOptions=&actionSearch&/&
android:id=&@+id/btn_get_value&
android:text=&取值&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&/&
android:id=&@+id/btn_all&
android:text=&全选&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&/&
android:id=&@+id/btn_select&
android:text=&从第2个字符开始选择&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&/&
android:id=&@+id/btn_get_select&
android:text=&获取选中文本&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&/&
&/LinearLayout&
&xml version=&1.0& encoding=&utf-8&&&LinearLayout xmlns:android=&/apk/res/android&android:orientation=&vertical&android:layout_width=&fill_parent&android:layout_height=&fill_parent&&&EditTextandroid:id=&@+id/edit_text&
android:layout_width=&fill_parent& android:layout_height=&wrap_content&android:imeOptions=&actionSearch&/&&Button android:id=&@+id/btn_get_value&android:text=&取值&android:layout_width=&wrap_content&android:layout_height=&wrap_content&/&&Button android:id=&@+id/btn_all&android:text=&全选&android:layout_width=&wrap_content&android:layout_height=&wrap_content&/&&Button android:id=&@+id/btn_select&android:text=&从第2个字符开始选择&android:layout_width=&wrap_content&android:layout_height=&wrap_content&/&&Button android:id=&@+id/btn_get_select&android:text=&获取选中文本&android:layout_width=&wrap_content&android:layout_height=&wrap_content&/&&/LinearLayout&
代码:
Java代码
package com.
import android.app.A
import android.os.B
import a&p&[NextPage][/NextPage]&/p&ndroid.text.E
import android.text.S
import android.view.KeyE
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.EditT
import android.widget.TextV
import android.widget.T
import android.widget.TextView.OnEditorActionL
* EditText演示
* @author 飞雪无情
public class HelloEditText extends Activity {
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText editText=(EditText)findViewById(R.id.edit_text);
//监听回车键
editText.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();
//获取EditText文本
Button getValue=(Button)findViewById(R.id.btn_get_value);
getValue.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(HelloEditText.this, editText.getText().toString(), Toast.LENGTH_SHORT).show();
//让EditText全选
Button all=(Button)findViewById(R.id.btn_all);
all.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
editText.selectAll();
//从第2个字符开始选择EditText文本
Button select=(Button)findViewById(R.id.btn_select);
select.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Editable editable=editText.getText();
Selection.setSelection(editable, 1,editable.length());
//获取选中的文本
Button getSelect=(Button)findViewById(R.id.btn_get_select);
getSelect.setOnClickListener(new OnClickListener() {
&p&[NextPage][/NextPage]&/p&
public void onClick(View v) {
int start=editText.getSelectionStart();
int end=editText.getSelectionEnd();
CharSequence selectText=editText.getText().subSequence(start, end);
Toast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT).show();
* 交换两个索引
* @param start 开始索引
* @param end 结束索引
protected void switchIndex(int start, int end) {
package com.import android.app.Aimport android.os.Bimport android.text.Eimport android.text.Simport android.view.KeyEimport android.view.Vimport android.view.View.OnClickLimport android.widget.Bimport android.widget.EditTimport android.widget.TextVimport android.widget.Timport android.widget.TextView.OnEditorActionL/*** EditText演示* @author 飞雪无情* @since */public class HelloEditText extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);final EditText editText=(EditText)findViewById(R.id.edit_text);//监听回车键editText.setOnEditorActionListener(new OnEditorActionListener() {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();}});//获取EditText文本Button getValue=(Button)findViewById(R.id.btn_get_value);getValue.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(HelloEditText.this, editText.getText().toString(), Toast.LENGTH_SHORT).show();}});//让EditText全选Button all=(Button)findViewById(R.id.btn_all);all.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {editText.selectAll();}});//从第2个字符开始选择EditText文本Button select=(Button)findViewById(R.id.btn_select);select.setOn&p&[NextPage][/NextPage]&/p&ClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Editable editable=editText.getText();Selection.setSelection(editable, 1,editable.length());}});//获取选中的文本Button getSelect=(Button)findViewById(R.id.btn_get_select);getSelect.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {int start=editText.getSelectionStart();int end=editText.getSelectionEnd();CharSequence selectText=editText.getText().subSequence(start, end);Toast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT).show();}});}/*** 交换两个索引* @param start 开始索引* @param end 结束索引*/protected void switchIndex(int start, int end) {int temp=start=end=}}
自定义View控件解决android文字排版和换行的问题(转,尚未测试)
/thread-.html
Java代码
import java.util.V
import android.content.C
import android.graphics.C
import android.graphics.C
import android.graphics.P
import android.graphics.Paint.FontM
import android.util.AttributeS
import android.view.V
import android.view.WindowM
import android.widget.LinearL
import android.widget.TextV
public class MyView extends TextView {
private final String namespace=&http://www.nearmobile.net&;
private int resourceId=0;
/* 声明Paint对象 */
private Paint mPaint =
/* 声明TextUtil对象 */
private TextUtil mTextUtil =
int m_iTextH
private WindowManager wm=
private String string=&&;
public MyView(Context context, AttributeSet set) {
super(context,set);
resourceId=set.getAttributeResourceValue(namespace, &text&, 0);
if(resourceId==0)
string=set.getAttributeValue(null,&text&);
string=this.getResources().getString(resourceId);
wm=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
/* 构建对象 */
m_iTextHeight=2000;
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(40);
mPaint.setTextSize(20);
int m_iTextWidth=wm.getDefaultDisplay().getWidth&p&[NextPage][/NextPage]&/p&();
FontMetrics fm = mPaint.getFontMetrics();
int m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + 4;
int line=0;
int istart=0;
for (int i = 0; i & string.length(); i++)
char ch = string.charAt(i);
float[] widths = new float[1];
String srt = String.valueOf(ch);
mPaint.getTextWidths(srt, widths);
if (ch == &\n&)
istart = i + 1;
w += (int) (Math.ceil(widths[0]));
if (w & m_iTextWidth)
if (i == (string.length() - 1))
m_iTextHeight=(line+2)*m_iFontHeight+2;
//用反射机制得到
m_iTextHeight
实例化TextUtil
mTextUtil = new TextUtil(string,5,25,wm.getDefaultDisplay().getWidth(),this.getHeight(),0x0,0xffffff,255,15);
初始化TextUtil
mTextUtil.InitText(string,5,25,wm.getDefaultDisplay().getWidth(),wm.getDefaultDisplay().getHeight(),0x0,0xffffff,255,15);*/
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/* 设置背景颜色 */
canvas.drawColor(Color.BLACK);
mPaint.setAntiAlias(true);
int w = 0;
int istart = 0;
int m_iFontH
int m_iRealLine=0;
Vector m_String=new Vector();
int m_iTextWidth=wm.getDefaultDisplay().getWidth();
FontMetrics fm = mPaint.getFontMetrics();
m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + 4;
//m_ipageLineNum = m_iTextHeight / m_iFontH
for (int i = 0; i & string.length(); i++)
ch = string.charAt(i);
float[] widths = new float[1];
String srt = String.valueOf(ch);
mPaint.getTextWidths(srt, widths);
if (ch == &\n&)
m_iRealLine++;
m_String.addElement(string.substring(istart, i));
istart = i + 1;
w += (int) (Math.ceil(widths[0]));
if (w & m_iTextWidth)
m_iRealLine++;
m_String.addElement(string.substring(istart, i));
}&p&[NextPage][/NextPage]&/p&
if (i == (string.length() - 1))
m_iRealLine++;
m_String.addElement(string.substring(istart, string.length()));
m_iTextHeight=m_iRealLine*m_iFontHeight+2;
System.out.println(&m_iTextHeight-----&&+m_iTextHeight);
canvas.setViewport(m_iTextWidth, m_iTextWidth);
for (int i = 0, j = 0; i & m_iRealL i++, j++)
canvas.drawText((String) (m_String.elementAt(i)), x,
y+m_iFontHeight * j, mPaint);
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int measuredHeight = measureHeight(heightMeasureSpec);
int measuredWidth = measureWidth(widthMeasureSpec);
this.setMeasuredDimension(measuredWidth, measuredHeight);
this.setLayoutParams(new LinearLayout.LayoutParams(measuredWidth,measuredHeight));
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
private int measureHeight(int measureSpec) {
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
// Default size if no limits are specified.
int result = m_iTextH
if (specMode == MeasureSpec.AT_MOST)
// Calculate the ideal size of your
// control within this maximum size.
// If your control fills the available
// space return the outer bound.
result = specS
else if (specMode == MeasureSpec.EXACTLY)
// If your control can fit within these bounds return that value.
result = specS
private int measureWidth(int measureSpec) {
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
// Default size if no limits are specified.
in&p&[NextPage][/NextPage]&/p&t result = 500;
if (specMode == MeasureSpec.AT_MOST)
// Calculate the ideal size of your control
// within this maximum size.
// If your control fills the available space
// return the outer bound.
result = specS
else if (specMode == MeasureSpec.EXACTLY)
// If your control can fit within these bounds return that value.
result = specS
import java.util.Vimport android.content.Cimport android.graphics.Cimport android.graphics.Cimport android.graphics.Pimport android.graphics.Paint.FontMimport android.util.AttributeSimport android.view.Vimport android.view.WindowMimport android.widget.LinearLimport android.widget.TextVpublic class MyView extends TextView {private final String namespace=&http://www.nearmobile.net&;private int resourceId=0;/* 声明Paint对象 */private Paint mPaint =/* 声明TextUtil对象 */private TextUtil mTextUtil =public
int m_iTextHprivate WindowManager wm=private String string=&&;public MyView(Context context, AttributeSet set) {super(context,set);resourceId=set.getAttributeResourceValue(namespace, &text&, 0);if(resourceId==0)string=set.getAttributeValue(null,&text&);elsestring=this.getResources().getString(resourceId);wm=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);/* 构建对象 */m_iTextHeight=2000;mPaint = new Paint();mPaint.setColor(Color.RED);mPaint.setStrokeWidth(40);mPaint.setTextSize(20);int m_iTextWidth=wm.getDefaultDisplay().getWidth();FontMetrics fm = mPaint.getFontMetrics();int m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + 4;int line=0;int istart=0;int w=0;for (int i = 0; i & string.length(); i++){char ch = string.charAt(i);float[] widths = new float[1];String srt = String.valueOf(ch);mPaint.getTextWidths(srt, widths);if (ch == &\n&){line++;istart = i + 1;&p&[NextPage][/NextPage]&/p& w = 0;}else{w += (int) (Math.ceil(widths[0]));if (w & m_iTextWidth){line++;istart =i--;w = 0;}else{if (i == (string.length() - 1)){line++;}}}}m_iTextHeight=(line+2)*m_iFontHeight+2;//用反射机制得到
m_iTextHeight
实例化TextUtil mTextUtil = new TextUtil(string,5,25,wm.getDefaultDisplay().getWidth(),this.getHeight(),0x0,0xffffff,255,15);初始化TextUtil mTextUtil.InitText(string,5,25,wm.getDefaultDisplay().getWidth(),wm.getDefaultDisplay().getHeight(),0x0,0xffffff,255,15);*/}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);/* 设置背景颜色 */canvas.drawColor(Color.BLACK);mPaint.setAntiAlias(true);int w = 0;int istart = 0;int m_iFontHint m_iRealLine=0;int x=2;int y=60;Vector m_String=new Vector();int m_iTextWidth=wm.getDefaultDisplay().getWidth();FontMetrics fm = mPaint.getFontMetrics();m_iFontHeight = (int) Math.ceil(fm.descent - fm.top) + 4;//m_ipageLineNum = m_iTextHeight / m_iFontHfor (int i = 0; i & string.length(); i++){ch = string.charAt(i);float[] widths = new float[1];String srt = String.valueOf(ch);mPaint.getTextWidths(srt, widths);if (ch == &\n&){m_iRealLine++;m_String.addElement(string.substring(istart, i));istart = i + 1;w = 0;}else{w += (int) (Math.ceil(widths[0]));if (w & m_iTextWidth){m_iRealLine++;m_String.addElement(string.substring(istart, i));istart =i--;w = 0;}else{if (i == (string.length() - 1)){m_iRealLine++;m_String.addElement(string.substring(istart, string.length()));}}}}m_iTextHeight=m_iRealLine*m_iFontHeight+2;System.out.println(&m_iTextHeight-----&&+m_iTextHeight);canvas.setViewport(m_iTextWidth, m_iTextWidth);for (int i = 0, j = 0; i & m_iRealL i++, j++){canvas.drawText((String) (m_String.elementAt(i)), x,
y+m_iFontHeight * j, mPaint);}}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int measuredHeight = measureHeight(heightMeasureSpec);
int measuredWidth = measureWidth(widthM&p&[NextPage][/NextPage]&/p&easureSpec);
this.setMeasuredDimension(measuredWidth, measuredHeight);this.setLayoutParams(new LinearLayout.LayoutParams(measuredWidth,measuredHeight));super.onMeasure(widthMeasureSpec, heightMeasureSpec);}
private int measureHeight(int measureSpec) {
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
// Default size if no limits are specified.
int result = m_iTextH
if (specMode == MeasureSpec.AT_MOST)
// Calculate the ideal size of your
// control within this maximum size.
// If your control fills the available
// space return the outer bound.
result = specS
else if (specMode == MeasureSpec.EXACTLY)
// If your control can fit within these bounds return that value.
result = specS
private int measureWidth(int measureSpec) {
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
// Default size if no limits are specified.
int result = 500;
if (specMode == MeasureSpec.AT_MOST)
// Calculate the ideal size of your control
// within this maximum size.
// If your control fills the available space
// return the outer bound.
result = specS
else if (specMode == MeasureSpec.EXACTLY)
// If your control can fit within these bounds return that value.
result = specS
}}
TextView 垂直自动滚动
/vaiyanzi/archive//2277791.html
在TextView中自定义链接
/post//4961075
实现TextView中文字链接的方式
/blog/1197726转载请保留出处:/mobile_development/725.html
上一篇:没有了
本周技术实现排行

我要回帖

更多关于 安卓中的position 的文章

 

随机推荐