Membuat TextView dapat digulir di Android


772

Saya menampilkan teks dalam tampilan teks yang tampaknya terlalu panjang untuk masuk ke dalam satu layar. Saya perlu membuat TextView saya dapat digulir. Bagaimana saya bisa melakukan itu?

Ini kodenya:

final TextView tv = new TextView(this);
tv.setBackgroundResource(R.drawable.splash);
tv.setTypeface(face);
tv.setTextSize(18);
tv.setTextColor(R.color.BROWN);
tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL);
tv.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent e) {
        Random r = new Random();
        int i = r.nextInt(101);
        if (e.getAction() == e.ACTION_DOWN) {
            tv.setText(tips[i]);
            tv.setBackgroundResource(R.drawable.inner);
        }
        return true;
    }
});
setContentView(tv);

Jawaban:


1722

Anda tidak perlu menggunakan ScrollViewsebenarnya.

Cukup atur

android:scrollbars = "vertical"

properti Anda TextViewdi file xml tata letak Anda.

Kemudian gunakan:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

dalam kode Anda.

Bingo, itu bergulir!


96
Tapi tentu saja maxLinesmengharuskan Anda untuk memasukkan nomor arbitrer; ini bukan sesuatu yang akan bekerja untuk setiap ukuran layar dan ukuran font? Saya merasa lebih mudah untuk hanya membungkusnya dengan ScrollView, artinya saya tidak perlu menambahkan atribut atau kode XML lebih lanjut (seperti mengatur metode pergerakan).
Christopher Orr

12
@Christopher, ScrollView juga membutuhkan 'android: layout_height'.
Regex Rookie

11
@Regex: Ya, ya. Baik Anda membiarkan ruang ScrollViewmengambil sebanyak yang dibutuhkan (misalnya melalui android:fillViewportatribut), atau Anda mengatur ukuran spesifik yang Anda inginkan. Penggunaan maxLinestidak boleh digunakan untuk mengatur ukuran elemen UI, sehingga tidak ada solusi.
Christopher Orr

62
Anda tidak perlu mendefinisikan maxlines. hanya sisanya.
Stevanicus

13
Untuk mengklarifikasi apa yang dikatakan semua orang tentang pengguliran "halus": Jika Anda menggunakan metode ini, pengguliran sebenarnya "halus" (artinya Anda dapat menggulir piksel demi piksel), namun itu tidak kinetik. Segera setelah Anda melepas jari Anda, jari itu akan berhenti bergulir secara instan - tidak ada gerakan menjentik. Ini cukup tidak dapat diterima untuk UI modern jadi saya akan mengedit jawaban untuk memastikan orang lain tidak membuang waktu untuk "solusi" ini.
Timmmm

310

Ini adalah bagaimana saya melakukannya murni dalam XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ScrollView
        android:id="@+id/SCROLLER_ID"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical"
        android:fillViewport="true">

        <TextView
            android:id="@+id/TEXT_STATUS_ID"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"/>
    </ScrollView>
</LinearLayout>

CATATAN:

  1. android:fillViewport="true"dikombinasikan dengan android:layout_weight="1.0"akan membuat tampilan teks mengambil semua ruang yang tersedia.

  2. Saat mendefinisikan Scrollview, JANGAN tentukan android:layout_height="fill_parent" jika tidak, scrollview tidak berfungsi! (ini telah menyebabkan saya membuang satu jam sekarang! FFS).

TIP PRO:

Untuk menggulir secara terprogram ke bawah setelah menambahkan teks, gunakan ini:

mTextStatus = (TextView) findViewById(R.id.TEXT_STATUS_ID);
mScrollView = (ScrollView) findViewById(R.id.SCROLLER_ID);

private void scrollToBottom()
{
    mScrollView.post(new Runnable()
    {
        public void run()
        {
            mScrollView.smoothScrollTo(0, mTextStatus.getBottom());
        }
    });
}

12
Tidak perlu digunakan mTextView.getBottom(), cukup gunakan metode ini mScrollView.fullScroll(View.FOCUS_DOWN)karena merupakan bagian dari API ScrollView. Lihat di sini dan di sini untuk info lebih lanjut.
ChuongPham

7
Android memperingatkan bahwa salah satu LinearLayoutatau ScrollViewmungkin tidak berguna dalam contoh ini (saya menghapus LinearLayoutsepenuhnya). Ini juga memperingatkan bahwa untuk TextView, itu harus android:layout_height="wrap_content"sesuai dengan ScrollView. Peringatan ini mungkin karena 3 tahun yang telah berlalu sejak jawaban ini diposting. Apa pun yang terjadi, jawaban ini mendukung pengguliran dan
penjepitan yang

Menambahkan di <!--suppress AndroidLintUselessParent -->atas ScrollViewdalam file xml akan menangani peringatan itu.
Louie Bertoncin

"Pro tip" tidak berfungsi untuk saya, di Android API level 9. Textview tetap digulir ke atas setelah menambahkan teks.
LarsH

Pendekatan ini jauh lebih baik menggunakan pendekatan jawaban yang diterima tidak akan menghasilkan pengalaman pengguna yang lancar.
seyedrezafar

120

Semua yang benar-benar diperlukan adalah setMovementMethod (). Berikut ini contoh menggunakan LinearLayout.

File main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:id="@+id/tv1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/hello"
    />
</LinearLayout>

File WordExtractTest.java

public class WordExtractTest extends Activity {

    TextView tv1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tv1 = (TextView)findViewById(R.id.tv1);

        loadDoc();
    }

    private void loadDoc() {

        String s = "";

        for(int x=0; x<=100; x++) {
            s += "Line: " + String.valueOf(x) + "\n";
        }

        tv1.setMovementMethod(new ScrollingMovementMethod());

        tv1.setText(s);
    }
}

3
Apakah ada cara untuk mengatur properti ini dalam XML? Saya bertanya-tanya mengapa mereka meninggalkan opsi itu.
Thalur

Berhasil tetapi apakah ada cara untuk menyegarkannya setelah menggulir? maksud saya setelah menggulir TextView saya akan mengubah teks di atasnya, tetapi posisinya tetap digulir bahkan jika tidak diperlukan. itu bcose sebelumnya saya telah menerapkan scroll ...
Nirav Dangi

9
tidak ada bilah gulir, dan gulir itu kikuk dibandingkan dengan ScrollViewmetode ini.
Jeffrey Blattman

1
Gunakan StringBuilderbukan String... apa yang Anda miliki adalah sedikit boros.
Alex Lockwood

4
ini berfungsi tetapi pengguliran tidak mulus. Masih berfungsi meskipun terima kasih.
frostymarvelous

46

Buat tampilan teks Anda hanya menambahkan ini

TextView textview= (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(new ScrollingMovementMethod());

16
Ini tidak melakukan pengguliran kinetik. Jangan gunakan ini.
Timmmm

3
@Timmmm cara mendapatkan gulungan kinetik?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Anda tidak ingin "pengguliran kinetik" untuk teks yang harus dibaca.
Jan

41

Tidak perlu dimasukkan

android:Maxlines="AN_INTEGER"`

Anda dapat melakukan pekerjaan Anda hanya dengan menambahkan:

android:scrollbars = "vertical"

Dan, letakkan kode ini di kelas Java Anda:

textview.setMovementMethod(new ScrollingMovementMethod());

Solusi yang jauh lebih baik daripada yang diterima, karena ukuran scrollbar tepat sesuai dengan teks dan Anda tidak membuang-buang ruang.
FractalBob

ketika saya menggunakan ScrollView sebagai orang tua, waktu itu tidak berfungsi
Pangeran

27

Anda juga bisa

  1. mengelilingi TextViewdengan ScrollView; atau
  2. atur metode Gerakan ke ScrollingMovementMethod.getInstance();.

22

Cara terbaik yang saya temukan:

Ganti TextView dengan EditText dengan atribut tambahan ini:

android:background="@null"
android:editable="false"
android:cursorVisible="false"

Tidak perlu membungkus dalam ScrollView.


2
Mudah jawaban terbaik dan paling tepat, terutama mengingat EditText adalah subkelas TextView dan pertanyaannya adalah bagaimana membuat tampilan teks dapat digulir, bukan bagaimana mengatasi masalah tersebut. Akan memilih dua kali jika saya bisa :)
Justin Buser

4
@JustinBuser Tidak bisa tidak setuju lagi. :) Ini murni kebetulan bahwa ini bekerja, dan tidak ada jaminan itu akan di versi Android masa depan. Jika Anda ingin menggulir, gunakan alat gulir yang disediakan Android. ScrollViewadalah cara yang tepat untuk pergi.
Madbreak

1
@Madbreak Tidak ada yang "kebetulan" tentang hal itu, EditText ADALAH TextView dengan beberapa metode tambahan dan penggantian yang khusus dirancang untuk mengakomodasi teks dengan panjang berbeda-beda. Dalam EditText tertentu menimpa nilai kembali untuk fungsi TextView getDefaultMovementMethod. Implementasi default mengembalikan NULL, EditText pada dasarnya melakukan hal yang sama semua jawaban lainnya menyarankan. Sejauh menggunakan alat yang disediakan Android prihatin, kelas EditText jauh lebih kecil kemungkinannya untuk menjadi usang daripada metode lain yang ditemukan dalam jawaban ini.
Justin Buser

4
@JustinBuser Masalah saya dengan hal itu adalah Anda tergantung pada perilaku default EditText, itulah yang saya maksud mungkin sangat baik berubah (tidak sama sekali bahwa EditText akan ditinggalkan). Anda dapat membantahnya, tetapi sekali lagi, idenya adalah menggunakan komponen dan fitur yang sesuai untuk tugas yang sedang dihadapi. ScrollView secara eksplisit dirancang untuk mencakup pengguliran. Saya selalu berusaha, dan selalu menyarankan orang lain menggunakan alat yang tepat untuk pekerjaan itu. Hampir selalu ada beberapa pendekatan untuk setiap masalah pemrograman yang diberikan. Pokoknya, terima kasih atas tanggapan bijaksana.
Madbreaks

16

Sederhana. Beginilah cara saya melakukannya:

  1. Sisi XML:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        tools:context="com.mbh.usbcom.MainActivity">
        <TextView
            android:id="@+id/tv_log"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            android:text="Log:" />
    </RelativeLayout>
  2. Sisi Jawa:

    tv_log = (TextView) findViewById(R.id.tv_log);
    tv_log.setMovementMethod(new ScrollingMovementMethod());

Bonus:

Agar tampilan teks gulir ke bawah saat teks mengisinya, Anda harus menambahkan:

    android:gravity="bottom"

ke file xml TextView. Ini akan menggulir ke bawah secara otomatis ketika lebih banyak teks masuk.

Tentu saja Anda perlu menambahkan teks menggunakan fungsi append alih-alih mengatur teks:

    tv_log.append("\n" + text);

Saya menggunakannya untuk tujuan Log.

Saya harap ini membantu ;)


14

Ini adalah "Cara menerapkan ScrollBar ke TextView Anda", hanya menggunakan XML.

Pertama, Anda perlu mengambil kontrol Textview di file main.xml dan menulis beberapa teks ke dalamnya ... seperti ini:

<TextView
    android:id="@+id/TEXT"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/long_text"/>

Selanjutnya, tempatkan kontrol tampilan teks di antara tampilan scroll untuk menampilkan bilah gulir untuk teks ini:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent">

    <ScrollView
        android:id="@+id/ScrollView01"
        android:layout_height="150px"
        android:layout_width="fill_parent">

        <TextView
            android:id="@+id/TEXT"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="@string/long_text"/>

    </ScrollView>
</RelativeLayout>

Itu dia...


6
Mengapa bahkan menulis ini? Ini adalah versi jawaban yang hampir identik, meskipun kurang benar, yang diposting lebih dari 6 bulan sebelum Anda menulisnya.
Justin Buser

11

Ini akan memberikan teks bergulir halus dengan bilah gulir.

ScrollView scroller = new ScrollView(this);
TextView tv = new TextView(this);
tv.setText(R.string.my_text);
scroller.addView(tv);

Mengaktifkan animasi biru. Jawaban terbaik di sini IMO.
Griffin W.

11

"Pro tip" di atas dari Someone Somewhere ( Membuat TextView dapat digulir pada Android ) berfungsi dengan baik, bagaimana jika Anda menambahkan teks secara dinamis ke ScrollView dan ingin secara otomatis menggulir ke bawah setelah menambahkan hanya ketika pengguna berada di bagian bawah ScrollView? (Mungkin karena jika pengguna telah menggulir ke atas untuk membaca sesuatu yang Anda tidak ingin mengatur ulang secara otomatis ke bawah selama menambahkan, yang akan mengganggu.)

Bagaimanapun, ini dia:

if ((mTextStatus.getMeasuredHeight() - mScrollView.getScrollY()) <=
        (mScrollView.getHeight() + mTextStatus.getLineHeight())) {
    scrollToBottom();
}

The mTextStatus.getLineHeight () akan membuatnya sehingga Anda tidak scrollToBottom () jika pengguna berada dalam satu baris dari ujung ScrollView.


10

Jika Anda ingin teks digulir dalam tampilan teks, maka Anda dapat mengikuti yang berikut:

Pertama, Anda harus subklas tampilan teks.

Dan kemudian gunakan itu.

Berikut ini adalah contoh dari tampilan teks subclass.

public class AutoScrollableTextView extends TextView {

    public AutoScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setEllipsize(TruncateAt.MARQUEE);
        setMarqueeRepeatLimit(-1);
        setSingleLine();
        setHorizontallyScrolling(true);
    }

    public AutoScrollableTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setEllipsize(TruncateAt.MARQUEE);
        setMarqueeRepeatLimit(-1);
        setSingleLine();
        setHorizontallyScrolling(true);
    }

    public AutoScrollableTextView(Context context) {
        super(context);
        setEllipsize(TruncateAt.MARQUEE);
        setMarqueeRepeatLimit(-1);
        setSingleLine();
        setHorizontallyScrolling(true);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(focused)
            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused) {
        if(focused)
            super.onWindowFocusChanged(focused);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

Sekarang, Anda harus menggunakannya dalam XML dengan cara ini:

 <com.yourpackagename.AutoScrollableTextView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:text="This is very very long text to be scrolled"
 />

Itu dia.


7

Tambahkan berikut ini di tampilan teks dalam XML.

android:scrollbars="vertical"

Dan akhirnya, tambahkan

textView.setMovementMethod(new ScrollingMovementMethod());

dalam file Java.


1
Ini tidak melakukan pengguliran kinetik. Jangan gunakan itu.
Timmmm

6

Saya tidak menemukan bergulir TextView untuk mendukung gerakan 'melemparkan', di mana ia terus bergulir setelah menjentikkan ke atas atau ke bawah. Saya akhirnya menerapkannya sendiri karena saya tidak ingin menggunakan ScrollView karena berbagai alasan, dan sepertinya tidak ada MovementMethod yang memungkinkan saya memilih teks dan mengklik tautan.


6
soo ... bagaimana Anda menambahkan gerakan melempar?
Lou Morda

6

Di kotlin untuk membuat tampilan teks dapat digulir

myTextView.movementMethod= ScrollingMovementMethod()

dan juga menambahkan xml properti ini

    android:scrollbars = "vertical"

5

Setelah selesai digulir, tambahkan baris ini ke baris terakhir tampilan saat Anda memasukkan sesuatu di tampilan:

((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);

Bung, tablescroller adalah tampilan yang diidentifikasi oleh atribut id dari XML yang diproses dalam .. Anda coba saja .. itu akan berfungsi dengan baik .. kerjanya fr me ..
Rahul Baradia

4

Jika Anda tidak ingin menggunakan solusi EditText maka Anda mungkin lebih beruntung dengan:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourLayout);
    (TextView)findViewById(R.id.yourTextViewId).setMovementMethod(ArrowKeyMovementMethod.getInstance());
}

4

Tambahkan ini ke tata letak XML Anda:

android:ellipsize="marquee"
android:focusable="false"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="To Make An textView Scrollable Inside The TextView Using Marquee"

Dan dalam kode Anda harus menulis baris berikut:

textview.setSelected(true);
textView.setMovementMethod(new ScrollingMovementMethod());

2
Ini tidak melakukan pengguliran kinetik. Jangan gunakan itu.
Timmmm

saya tidak ingin ellipsize teks akhir. bagaimana saya melakukannya.
Sagar Nayak

@SagarNayak menggunakan android: ellipsize = "tidak ada"
Francis

2

Kode di bawah ini membuat tampilan teks gulir horizontal otomatis:

Saat menambahkan TextView ke penggunaan xml

<TextView android:maxLines="1" 
          android:ellipsize="marquee"
          android:scrollHorizontally="true"/>

Setel properti TextView berikut di onCreate ()

tv.setSelected(true);
tv.setHorizontallyScrolling(true); 


1

Gunakan seperti ini

<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:maxLines = "AN_INTEGER"
    android:scrollbars = "vertical"
/>

0

Dalam kasus saya. Tata Letak Kendala.AS 2.3.

Implementasi kode:

YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());

XML:

android:scrollbars="vertical"
android:scrollIndicators="right|end"

0

Saya berjuang dengan ini selama lebih dari seminggu dan akhirnya menemukan cara untuk membuat ini bekerja!

Masalah saya adalah semuanya akan bergulir sebagai 'blok'. Teks itu sendiri sedang bergulir, tetapi sebagai potongan daripada baris demi baris. Ini jelas tidak berhasil untuk saya, karena akan memotong garis di bagian bawah. Semua solusi sebelumnya tidak berhasil untuk saya, jadi saya membuat sendiri.

Berikut ini solusi termudah:

Buat file kelas bernama: 'PerfectScrollableTextView' di dalam sebuah paket, lalu salin dan tempel kode ini di:

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;

public class PerfectScrollableTextView extends TextView {

    public PerfectScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    public PerfectScrollableTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    public PerfectScrollableTextView(Context context) {
        super(context);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(focused)
            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused) {
        if(focused)
            super.onWindowFocusChanged(focused);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

Terakhir, ubah 'TextView' Anda dalam XML:

Dari: <TextView

Untuk: <com.your_app_goes_here.PerfectScrollableTextView


1
100% jawaban sempurna. Saya menghadapi masalah yang sama seperti yang Anda sebutkan dalam deskripsi. terapkan banyak solusi tetapi tidak bekerja dengan sempurna. tetapi solusi Anda berfungsi dengan baik dalam setiap kasus. hemat waktuku :) Terima kasih
Daxesh Vekariya

@DaxeshVekariya Senang itu berhasil untuk Anda!
Petro

0

Masukkan maxLinesdan scrollbarsdi dalam TextView di xml.

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="vertical"
    android:maxLines="5" // any number of max line here.
    />

Kemudian dalam kode java.

textView.setMovementMethod(new ScrollingMovementMethod());


0

Saya punya masalah ini ketika saya menggunakan TextViewdi dalam ScrollView. Solusi ini berhasil bagi saya.

scrollView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                description.getParent().requestDisallowInterceptTouchEvent(false);

                return false;
            }
        });

        description.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                description.getParent().requestDisallowInterceptTouchEvent(true);

                return false;
            }
        });

0

kapan pun Anda perlu menggunakan ScrollView sebagai induk , dan Anda juga menggunakan metode gerakan gulir dengan TextView.

Dan Ketika Anda memotret ke mendatar perangkat Anda waktu itu terjadi beberapa masalah . (seperti) seluruh halaman dapat digulirkan tetapi metode gerakan gulir tidak dapat bekerja.

jika Anda masih perlu menggunakan ScrollView sebagai metode pergerakan orang tua atau gulir maka Anda juga menggunakan desc di bawah ini.

Jika Anda tidak memiliki masalah maka Anda menggunakan EditText bukan TextView

Lihat di bawah :

<EditText
     android:id="@+id/description_text_question"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="@null"
     android:editable="false"
     android:cursorVisible="false"
     android:maxLines="6"/>

Di sini, EditText berperilaku seperti TextView

Dan masalah Anda akan teratasi


0

XML - Anda bisa menggunakan android:scrollHorizontally Atribut

Apakah teks dibolehkan lebih lebar dari tampilan (dan karenanya dapat digulir secara horizontal).

Mungkin berupa nilai boolean, seperti "benar" atau "salah".

Prigramacaly - setHorizontallyScrolling(boolean)


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.