Bagaimana saya menempatkan perbatasan di sekitar Android textview?

Apakah mungkin untuk menggambar perbatasan sekitar textview?

Mengomentari pertanyaan (2)
Larutan

Anda dapat mengatur shape drawable (persegi panjang) sebagai latar belakang untuk melihat.

Dan persegi panjang drawable back.xml (dimasukkan ke res/drawable folder):




Anda dapat menggunakan @android:warna/transparan untuk warna solid untuk memiliki latar belakang transparan. Anda juga dapat menggunakan padding untuk memisahkan teks dari perbatasan. untuk informasi lebih lanjut lihat: http://developer.android.com/guide/topics/resources/drawable-resource.html

Komentar (8)

Mari saya meringkas beberapa yang berbeda (non-programatik) metode.

Menggunakan shape drawable

Simpan kode berikut sebagai sebuah file XML di dalam folder drawable (misalnya, my_border.xml):

<?xml version="1.0" encoding="utf-8"?>














Kemudian mengaturnya sebagai latar belakang untuk anda TextView:

Bantuan lebih lanjut:

Menggunakan 9-patch

9-patch adalah merenggang gambar latar belakang. Jika anda membuat sebuah gambar dengan perbatasan maka akan memberikan anda TextView perbatasan. Semua yang perlu anda lakukan adalah membuat gambar dan kemudian set ke latar belakang di TextView.

Berikut adalah beberapa link yang akan menunjukkan cara untuk membuat 9-patch gambar:

Bagaimana jika saya hanya ingin perbatasan atas?

Menggunakan layer-daftar

Anda dapat menggunakan lapisan daftar untuk menumpuk dua persegi panjang di atas satu sama lain. Dengan membuat persegi panjang kedua hanya sedikit lebih kecil dari persegi panjang pertama, anda dapat membuat efek perbatasan. Yang pertama (yang lebih rendah) persegi panjang adalah warna border dan kedua persegi panjang adalah warna latar belakang.

<?xml version="1.0" encoding="utf-8"?>















Setelan android:top="2dp" offset atas (membuatnya lebih kecil) dengan 2dp. Hal ini memungkinkan pertama (yang lebih rendah) persegi panjang untuk menunjukkan melalui, memberikan efek perbatasan. Anda dapat menerapkan ini untuk TextView latar belakang dengan cara yang sama bahwa bentuk drawable dilakukan di atas.

Berikut adalah beberapa link yang lebih tentang lapisan daftar:

Menggunakan 9-patch

Anda hanya dapat membuat 9-patch gambar dengan satu perbatasan. Segala sesuatu yang lain adalah sama seperti yang dibahas di atas.

Menggunakan View

Ini adalah jenis trik tapi itu bekerja dengan baik jika anda perlu untuk menambahkan seperator antara dua pandangan atau perbatasan untuk satu TextView.










Berikut adalah beberapa link:

Komentar (3)

Cara sederhana adalah dengan menambahkan sebuah view untuk anda TextView. Contoh untuk bagian bawah garis perbatasan:





Untuk arah lain perbatasan, silakan menyesuaikan lokasi pemisah melihat.

Komentar (3)

Saya telah memecahkan masalah ini dengan memperluas textview dan menggambar perbatasan secara manual. Aku bahkan ditambahkan sehingga anda dapat memilih jika perbatasan putus-putus atau putus-putus.

public class BorderedTextView extends TextView {
        private Paint paint = new Paint();
        public static final int BORDER_TOP = 0x00000001;
        public static final int BORDER_RIGHT = 0x00000002;
        public static final int BORDER_BOTTOM = 0x00000004;
        public static final int BORDER_LEFT = 0x00000008;

        private Border[] borders;

        public BorderedTextView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init();
        }

        public BorderedTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }

        public BorderedTextView(Context context) {
            super(context);
            init();
        }
        private void init(){
            paint.setStyle(Paint.Style.STROKE);
            paint.setColor(Color.BLACK);
            paint.setStrokeWidth(4);        
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            if(borders == null) return;

            for(Border border : borders){
                paint.setColor(border.getColor());
                paint.setStrokeWidth(border.getWidth());

                if(border.getStyle() == BORDER_TOP){
                    canvas.drawLine(0, 0, getWidth(), 0, paint);                
                } else
                if(border.getStyle() == BORDER_RIGHT){
                    canvas.drawLine(getWidth(), 0, getWidth(), getHeight(), paint);
                } else
                if(border.getStyle() == BORDER_BOTTOM){
                    canvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint);
                } else
                if(border.getStyle() == BORDER_LEFT){
                    canvas.drawLine(0, 0, 0, getHeight(), paint);
                }
            }
        }

        public Border[] getBorders() {
            return borders;
        }

        public void setBorders(Border[] borders) {
            this.borders = borders;
        }
}

Dan perbatasan kelas:

public class Border {
    private int orientation;
    private int width;
    private int color = Color.BLACK;
    private int style;
    public int getWidth() {
        return width;
    }
    public void setWidth(int width) {
        this.width = width;
    }
    public int getColor() {
        return color;
    }
    public void setColor(int color) {
        this.color = color;
    }
    public int getStyle() {
        return style;
    }
    public void setStyle(int style) {
        this.style = style;
    }
    public int getOrientation() {
        return orientation;
    }
    public void setOrientation(int orientation) {
        this.orientation = orientation;
    }
    public Border(int Style) {
        this.style = Style;
    }
}

Semoga ini bisa membantu seseorang :)

Komentar (2)

Aku hanya melihat jawaban serupa-- itu's dapat dilakukan dengan Stroke dan berikut ini menimpa:

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {

Paint strokePaint = new Paint();
strokePaint.setARGB(255, 0, 0, 0);
strokePaint.setTextAlign(Paint.Align.CENTER);
strokePaint.setTextSize(16);
strokePaint.setTypeface(Typeface.DEFAULT_BOLD);
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setStrokeWidth(2);

Paint textPaint = new Paint();
textPaint.setARGB(255, 255, 255, 255);
textPaint.setTextAlign(Paint.Align.CENTER);
textPaint.setTextSize(16);
textPaint.setTypeface(Typeface.DEFAULT_BOLD);

canvas.drawText("Some Text", 100, 100, strokePaint);
canvas.drawText("Some Text", 100, 100, textPaint);

super.draw(canvas, mapView, shadow); 
}
Komentar (2)

Solusi yang paling sederhana I've ditemukan (dan yang benar-benar bekerja):

Komentar (2)

Anda dapat mengatur perbatasan dengan dua metode. Salah satunya adalah dengan drawable dan yang kedua adalah program.

Menggunakan Drawable







Program


public static GradientDrawable backgroundWithoutBorder(int color) {

    GradientDrawable gdDefault = new GradientDrawable();
    gdDefault.setColor(color);
    gdDefault.setCornerRadii(new float[] { radius, radius, 0, 0, 0, 0,
                                           radius, radius });
    return gdDefault;
}
Komentar (1)

Anda dapat menambahkan sesuatu seperti ini dalam kode anda:




Komentar (2)

Saya menemukan cara yang lebih baik untuk menempatkan perbatasan di sekitar sebuah TextView.

Menggunakan sembilan-patch gambar untuk latar belakang. It's cukup sederhana, SDK dilengkapi dengan alat untuk membuat 9-patch gambar, dan melibatkan benar-benar tidak ada **** coding.

Link ini http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch.

Komentar (7)

Periksa link di bawah ini untuk membuat sudut bulat http://androidcookbook.com/Recipe.seam?recipeId=2318

Folder ditarik, di bawah res, dalam sebuah proyek Android tidak dibatasi untuk bitmap (PNG atau JPG file), tetapi juga untuk mempertahankan bentuk yang didefinisikan dalam file XML.

Bentuk-bentuk ini kemudian dapat digunakan kembali dalam proyek. Bentuk ini dapat digunakan untuk menempatkan perbatasan di sekitar tata letak. Contoh ini menunjukkan perbatasan persegi dengan sudut melengkung. File baru yang disebut customborder.xml dibuat di folder drawable (di Eclipse menggunakan menu File dan pilih New kemudian File, dengan drawable folder yang dipilih ketik nama file dan klik Finish).

XML untuk mendefinisikan bentuk perbatasan yang dimasukkan:

<?xml version="1.0" encoding="UTF-8"?>




Atribut android:bentuk` diatur untuk persegi panjang (bentuk file juga mendukung oval, garis, dan cincin). Persegi panjang adalah nilai default, sehingga atribut ini bisa ditinggalkan jika itu adalah persegi panjang yang didefinisikan. Lihat dokumentasi Android di bentuk di http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape untuk informasi rinci tentang bentuk file.

Unsur sudut set sudut persegi panjang yang akan dibulatkan. Hal ini dimungkinkan untuk mengatur radius yang berbeda pada masing-masing sudut (lihat Android referensi).

Padding atribut yang digunakan untuk memindahkan isi dari Tampilan yang bentuk ini diterapkan, untuk mencegah isi tumpang tindih perbatasan.

Warna perbatasan di sini adalah set ke abu-abu terang (CCCCCC heksadesimal RGB value).

Bentuk juga mendukung gradien, tetapi yang tidak digunakan di sini. Sekali lagi, melihat sumber daya Android untuk melihat bagaimana gradien didefinisikan. Bentuk ini diterapkan untuk laypout menggunakan android:background="@drawable/customborder".

Dalam tata letak tampilan lain dapat ditambahkan sebagai normal. Dalam contoh ini, satu TextView telah ditambahkan, dan teks putih (FFFFFF heksadesimal RGB). Latar belakang diatur ke biru, ditambah beberapa transparansi untuk mengurangi kecerahan (A00000FF heksadesimal alpha nilai RGB). Akhirnya tata letak offset dari layar edge dengan menempatkannya ke dalam tata letak dengan jumlah kecil padding. Lengkap tata letak file sehingga:

<?xml version="1.0" encoding="utf-8"?>




Komentar (1)

Aku punya cara untuk melakukan hal ini sangat sederhana, dan I'd ingin berbagi.

Ketika saya ingin persegi mi TextViews, saya hanya menempatkan mereka di sebuah LinearLayout. Aku mengatur warna latar belakang dari saya LinearLayout, dan saya tambahkan margin untuk saya TextView. Hasilnya persis seperti jika anda alun-alun TextView.

Komentar (0)

Di sini saya 'sederhana' kelas pembantu yang kembali ImageView dengan perbatasan. Hanya drop ini di utils, dan menyebutnya seperti ini:

ImageView selectionBorder = BorderDrawer.generateBorderImageView(context, borderWidth, borderHeight, thickness, Color.Blue);

Berikut ini adalah kode.

/**
 * Because creating a border is Rocket Science in Android.
 */
public class BorderDrawer
{
    public static ImageView generateBorderImageView(Context context, int borderWidth, int borderHeight, int borderThickness, int color)
    {
        ImageView mask = new ImageView(context);

        // Create the square to serve as the mask
        Bitmap squareMask = Bitmap.createBitmap(borderWidth - (borderThickness*2), borderHeight - (borderThickness*2), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(squareMask);

        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(color);
        canvas.drawRect(0.0f, 0.0f, (float)borderWidth, (float)borderHeight, paint);

        // Create the darkness bitmap
        Bitmap solidColor = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888);
        canvas = new Canvas(solidColor);

        paint.setStyle(Paint.Style.FILL);
        paint.setColor(color);
        canvas.drawRect(0.0f, 0.0f, borderWidth, borderHeight, paint);

        // Create the masked version of the darknessView
        Bitmap borderBitmap = Bitmap.createBitmap(borderWidth, borderHeight, Bitmap.Config.ARGB_8888);
        canvas = new Canvas(borderBitmap);

        Paint clearPaint = new Paint();
        clearPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

        canvas.drawBitmap(solidColor, 0, 0, null);
        canvas.drawBitmap(squareMask, borderThickness, borderThickness, clearPaint);

        clearPaint.setXfermode(null);

        ImageView borderView = new ImageView(context);
        borderView.setImageBitmap(borderBitmap);

        return borderView;
    }
}
Komentar (2)

Mengubah Konstantin Burov menjawab karena tidak bekerja dalam kasus saya:

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







compileSdkVersion 26 (Android 8.0), minSdkVersion 21 (Android 5.0), targetSdkVersion 26, implementasi 'com.android.dukungan:appcompat-v7:26.1.0', gradle:4.1

Komentar (0)

Membuat perbatasan pemandangan dengan latar belakang warna sebagai warna border dan ukuran teks anda lihat. mengatur border melihat padding lebar perbatasan. Mengatur teks tampilan warna latar belakang seperti warna yang anda inginkan untuk tampilan teks. Sekarang tambahkan teks anda lihat di dalam perbatasan lihat.

Komentar (0)

Hal ini dapat membantu anda.

Komentar (0)

Anda dapat membuat latar belakang kustom untuk teks anda lihat. Langkah-langkah

  1. Pergi untuk proyek anda.
  2. Pergi ke sumber daya dan klik kanan untuk drawable.
  3. Klik pada Baru -> Drawable Resource File
  4. Memberikan nama untuk file anda
  5. Paste kode berikut dalam file
  1. Untuk teks anda melihat di mana anda ingin menggunakannya sebagai backgroud,

android:background="@drawable/your_fileName"

Komentar (0)

Coba ini:




Komentar (0)

Ada banyak cara untuk menambahkan batas ke textView. Yang paling sederhana adalah dengan membuat custom drawable dan menetapkan sebagai android:background="@drawable/textview_bg" untuk textView.

Yang textview_bg.xml akan pergi di bawah Drawables dan dapat menjadi sesuatu seperti ini. Anda dapat memiliki solid atau gradient latar belakang (atau apa-apa jika tidak diperlukan), sudut untuk menambahkan sudut radius dan stroke untuk menambahkan perbatasan.

textview_bg.xml

<?xml version="1.0" encoding="utf-8"?>








Komentar (0)

Sebenarnya, itu adalah sangat sederhana. Jika anda ingin sederhana hitam persegi panjang belakang Textview, hanya menambahkan android:background="@android:warna/hitam" dalam TextView kategori. Seperti ini:

Komentar (0)