!DevLog

آرشیوی از کد های کاربردی :)

!DevLog

آرشیوی از کد های کاربردی :)

  • ۰
  • ۰

سلام،

یکی از نماهای کاربردی در گوشی ها نمایش تعداد کاراکتر تایپ شده هست که در تمام نرم‌افزارهای اس‌ام‌اسی پیدا میشه،

اینجا من یک کلاس دارم که از extends EditText شده.

public class HelperLimitedEditText extends EditText {

	private int maximum_text_size = -1;
	private Paint limit_text_paint;
	// private Paint background;
	private int current_text_size;
	private final int DEFAULT_X_MARGIN = 10;
	private final int DEFAULT_Y_MARGIN = 20;

	public void setTextSizeLimite(int max) {
		maximum_text_size = max;
		setMaxTextSize(maximum_text_size);

		// background = new Paint();
		// background.setColor(Color.WHITE);
		// background.setStyle(Style.FILL);
		limit_text_paint = new Paint();
		limit_text_paint.setFlags(Paint.ANTI_ALIAS_FLAG);
		limit_text_paint.setColor(Color.GRAY);
		limit_text_paint.setTextSize(14);
		current_text_size = 0;

	}

	public HelperLimitedEditText(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
		initComponents(attrs);
	}

	public HelperLimitedEditText(Context context, AttributeSet attrs) {
		super(context, attrs);
		initComponents(attrs);
	}

	public HelperLimitedEditText(Context context) {
		super(context);
		initComponents(null);
	}

	private void initComponents(AttributeSet attrs) {
		super.addTextChangedListener(new TextWatcher() {

			@Override
			public void afterTextChanged(Editable s) {
				if (maximum_text_size != -1)
					current_text_size = getText().toString().length();
				invalidate();
			}

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

			@Override
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
			}
		});
	}

	public void setMaxTextSize(int max) {
		maximum_text_size = max;
		setFilters(new InputFilter[] { new InputFilter.LengthFilter(max) });
	}

	protected float getLimitIndicatorX(String text) {
		float widths[] = new float[text.length() + 2];
		limit_text_paint.getTextWidths(text, widths);

		float sum = 0;
		for (float w : widths)
			sum += w;
		return getWidth() + getScrollX() - sum - DEFAULT_X_MARGIN;
	}

	protected float getLimitIndicatorY(String text) {
		return DEFAULT_Y_MARGIN + getScrollY();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		if (maximum_text_size != -1) {
			String text = current_text_size + "/" + maximum_text_size;
			canvas.drawText(text, getLimitIndicatorX(text),
					getLimitIndicatorY(text), limit_text_paint);
		}
	}
}
برای استفاده هم باید لایه رو از جنس این کلاس ساخت:
<[package-name].helperlimitededittext 
   android:id="@+id/txt" 
   android:layout_width="match_parent" 
   android:layout_height="wrap_content" 
   android:ems="10" android:lines="5" >
و در نهایت در کد های جاوا:
final HelperLimitedEditText txt = (HelperLimitedEditText) findViewById(R.id.txt);
        txt.setTextSizeLimite(60);
این کد رو با کمی تغییر میشه از کدهای جاوا بی‌نیاز کرد ولی برای تفاوت بین کاراکتر های فارسی و انگلیسی این دسترسی رو بهتر میدونم 

  • ۹۳/۰۵/۱۲
  • هومن نقی‌ای

Limited

EditText

Android

java

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی