Showing posts with label TextView. Show all posts
Showing posts with label TextView. Show all posts

Wednesday, October 4, 2017

Textview trong Swift

Swift sử dụng label để hiển thị chữ, nhưng nó cũng có textView. So với label, textView tiện lợi hơn ở chỗ nó có sẵn Scrollview bên trong. Nếu chuỗi ký tự dài, có nhiều dòng nó sẽ tự cuộn xuống để xem được. Nếu dùng label để hiển thị nhiều dòng, bạn phải set cho numberLine =0, và để label có đủ chiều cao bạn phải dùng lệnh la.sizeToFit()
Nhưng với textView bạn không cần làm như vậy.
Khai báo lên trên viewDidLoad
var gi:UITextView!
Định vị dưới dòng super
gi = UITextView(frame: CGRect(x:100, y: 0, width: 100, height: 60))
Tạo viền xung quanh
gi.layer.borderWidth = 1
Set chữ ra
gi.text = String manylines
Nhét vào view
view.addSubview(gi)

Ta có thể thấy có dấu Scroll ở bên phải textView khi trỏ chuột vào.
Nếu người dùng gõ ngón tay vào màn hình thì bàn phím sẽ bật ra và có thể sửa vào đoạn văn bản được.
Để bàn phím không hiện ra khi chạm tay vào, ta dùng lệnh.
gi.editable=false
Nếu ta dùng lệnh gi.userInteractionEnabled=false thì bàn phím cũng không hiện nhưng người dùng sẽ không thể cuộn xuống để đọc tiếp nếu văn bản quá dài.

Custom font textView trong Android

Bạn muốn chỉnh font chữ hiển thị theo kiểu tùy chọn, ví dụ như sau.

Bạn sẽ copy font cần dùng vào thư mục assets.

Sau đó cho dòng sau vào để set font cần dùng.
tv.setTypeface(Typeface.createFromAsset(this.getAssets(), "Benxuan.TTF"));

Chú ý là tên font có đuôi TTF viết hoa thì bạn cũng để viết hoa, viết thường thì cũng để viết thường, nếu không sẽ bị crash.

Còn một cách khác cũng đơn giản. Như khi chỉ cần dùng một vài dòng ngắn, bạn cứ đánh dòng đó trong Word, chỉnh font tùy ý rồi chụp ảnh màn hình bằng phím PrtSc SysRq, dán vào Paint, cắt thành ảnh cho vào ứng dụng cũng tương tự.

Vô hiệu hóa TextView, Button Android

Bạn muốn nút bấm không bấm được dù vẫn ở đó, hãy thêm dòng sau vào dưới findViewByid.
button.setEnabled(false);
Để ấn được trở lại, hãy chuyển thành.
button.setEnabled(true);
Muốn làm biến mất nút, hoặc chữ, cho dòng sau vào.
TextView.setVisibility(View.INVISIBLE);
Muốn nó hiện lại, dùng
TextView.setVisibility(View.VISIBLE);
Cách trên view không trông thấy nhưng vẫn nằm ở đó. Muốn làm mất hẳn view thì bạn dùng
TextView.setVisibility(View.GONE);

Lúc này cả vị trí của chữ cũng biến mất, nếu layout của bạn là LinearLayout dọc, những phần bên dưới sẽ tự động dồn lên vào vị trí của chữ đã mất.

Margin và Padding

Trong khi làm giao diện với xml, ta hãy gặp hai khái niệm Margin và Padding, chúng hơi khác nhau, cần phân biệt.
Giả sử ta có 2 textView cạnh nhau trong layout, bình thường file xml như sau.
<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_gravity="center_horizontal">

        <TextView
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/line2"
            android:text="Chữ ví dụ"
            android:textColor="#800000"
            android:textSize="16sp" />

        <TextView
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/line2"
            android:text="Chữ ví dụ"
            android:textColor="#800000"
            android:textSize="16sp" />
    </LinearLayout>
Bây giờ ta thêm marginLeft cho cả hai textView.
android:layout_marginLeft="10dp"
Ta thấy cả 2 textView đã dịch đi cách trái một khoảng 10dp.
Bây giờ thêm paddingLeft cho cả 2 textView.
android:paddingLeft="10dp"
Ta thấy chữ đã dịch vào trong cách lề một khoảng 10dp.
Như vậy sự khác nhau của chúng là Margin sẽ tác động đến toàn bộ view, dịch đi một khoảng cách view bên cạnh. Còn Padding chỉ tác động tới chữ ở trong view, dịch chữ đi cách lề của view một khoảng.
Phân biệt 2 điều này giúp ta lựa chọn giữa chúng để căn chỉnh chữ.
Nếu có textView bị hẹp, muốn một ký tự có thể lấn vào lề phải, ta sẽ dùng padding.
<TextView
            android:layout_width="87dp"
            android:layout_height="50dp"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/line2"
            android:text="Chữ ví dụ dài"
            android:singleLine="true"
            android:ellipsize="none"
            android:paddingRight="-5dp"
            android:layout_marginLeft="10dp"
            android:textColor="#800000"
            android:textSize="16sp" />


Đổi màu chữ theo thời gian trong Android

Để trang trí ứng dụng, thu hút sự chú ý của người dùng, đôi khi ta cần chữ hiển thị đổi màu liên tục cho bắt mắt.
Ta sẽ thêm đoạn code sau xuống dưới dòng tham chiếu địa chỉ findViewByid.
int RED = 0xffFF0000;
int BLUE = 0xff0000FF;
ValueAnimator colorAnim = ObjectAnimator.ofInt(tv, "textColor", RED, BLUE);
colorAnim.setDuration(1000);
colorAnim.setEvaluator(new ArgbEvaluator());
colorAnim.setRepeatCount(ValueAnimator.INFINITE);
colorAnim.setRepeatMode(ValueAnimator.REVERSE);
colorAnim.start();


Ấn Ctrl+Shift +O để nhập các thư viện cần vào.
Trông các pha màu của nó như sau.

Để tăng tốc độ nhanh chậm thì sửa giá trị colorAnim.setDuration(1000);
muốn nhanh thì giảm đi, chậm thì tăng lên.
Để nó vừa nhấp nháy vừa đổi màu, bạn bỏ hai chữ ff trước dòng int BLUE đi thành
int BLUE = 0x0000FF;
Ta có thể đổi màu chữ cho textView và cả Button
Bạn có thể xem thêm bài làm chữ nhấp nháy nếu chỉ muốn riêng hiệu ứng nhấp nháy.


Cố định font chữ trong android

Nhiều người dùng thích để font chữ lớn, họ vào setting trong điện thoại và đặt font chữ cho to lên, có khi là Extra large. Nếu bạn không để ý điều này, các view có thể bị vỡ giao diện.
Một cái nút để font bình thường sẽ như sau.
Nhưng khi người dùng để font lớn, nó trông như sau
Khi mới làm app, tôi không để ý điều này. Cho đến khi nhìn thấy đứa em dùng một ứng dụng của mình. Nó để font chữ lớn nên các nút bấm, chữ bị vỡ lung tung, trông rất kinh khủng.
Để xử lý vấn đề này, bạn có thể làm theo 2 cách.
Trong file xml, hãy để kích thước textSize là mm, không phải là sp, hay dp.
android:textSize="3mm"
Hoặc ở trong code, bạn thêm dòng sau dưới dòng tham chiếu địa chỉ findViewByid.
Textview.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, 15);
Với nút thì:
Button.setTextSize(android.util.TypedValue.COMPLEX_UNIT_DIP, 15);
Bạn cũng có thể để trỏ vào dấu chấm sau TypedValue rồi ấn Ctrl+ Space bar để chọn các loại đo lường khác như inch là IN, pixel là PT chẳng hạn.
Sau khi làm như vậy thì giao diện sẽ giữ nguyên dù người dùng có set cỡ chữ to hay nhỏ.

Một vài thao tác với TextView

Có những lúc ta muốn TextView ấn được để phóng to, để chuyển sang màn hình mới chẳng hạn. Ta sẽ thêm vào dòng code sau trong file xml
android:clickable="true"
android:onClick="click"


Tiếp theo, trong class ta thêm vào phương thức click
public void click(View v) {
{
Bạn đặt tên phương thức trong file xml là gì thì trong class phương thức cũng phải có tên như vậy.
Cách này cũng có thể dùng cho nút bấm, với nút bạn không cần dòng android:clickable="true" vì nó đã ấn được rồi.
Cũng có thể dùng cho cả layout lớn, khi bạn muốn người dùng ấn vào vùng đó thì chuyển sang class mới chẳng hạn.
Muốn chỉ có 1 dòng, không được xuống dòng nếu bị chật.
android:singleLine="true"
Khi bạn đã cố định một dòng rồi nhưng bị chật, textView sẽ hiển thị như sau.

Bạn muốn cứ hiện chữ được đến đâu thì hiện, không co lại thành dấu ba chấm thì thêm dòng sau vào.
android:ellipsize="none"
Lúc đó, vẫn có chữ được hiển thị thêm.

Nếu bạn muốn cố định số dòng, có thể dùng lệnh sau
android:lines="2"