แสดงปุ่มย้อนกลับบนแถบการกระทำ


181

ฉันกำลังพยายามที่จะแสดงBack buttonบนAction barเพื่อย้ายหน้า / กิจกรรมก่อนหน้าหรือไปยังหน้าหลัก (เปิดครั้งแรก) และฉันไม่สามารถทำมันได้

รหัสของฉัน

ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);

onCreateรหัสที่อยู่ใน


19
ใช้: getSupportActionBar (). setDisplayHomeAsUpEnabled (จริง);
Sukitha Udugamasooriya

@SukithaUdugamasooriya ขอบคุณมาก
Sardorbek Rkh

คำตอบ:


207

อย่างนี้เป็นเรื่องง่ายที่จะแสดงปุ่มย้อนกลับ

actionBar.setDisplayHomeAsUpEnabled(true);

จากนั้นคุณสามารถกำหนดเหตุการณ์ย้อนกลับได้ที่ onOptionsItemSelected

case android.R.id.home:
this.finish();
return true;

ฉันเพิ่มบรรทัดด้านบนใน onOptionsItemSelected (รายการ MenuItem) เนื่องจากฉันมีเมนูในการดำเนินการที่ไม่ดีฉันกำลังแสดงรายการรหัสเพื่อเปลี่ยนเส้นทางตัวเลือกเมนูรหัสบ้านไม่ทำงานเมื่อคลิก

หากคุณพบพฤติกรรมแปลก ๆ (เหมือนใน: คุณใช้ปุ่มย้อนกลับ (R.id.home) ของแฟรกเมนต์และปิดท้ายกิจกรรม) ตรวจสอบให้แน่ใจว่าคุณไม่มี "android: noHistory" ตั้งอยู่ในกิจกรรมนี้เพราะถ้า คุณทำแม้จะย้อนกลับจากส่วนหนึ่งไปยัง "ภาพรวม" ของกิจกรรมก็จะเสร็จสิ้น
Igor

2
ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่ากิจกรรมพาเรนต์ใน AndroidMenifest.xml เพื่อให้ปุ่ม R.id.home ทำงานได้
Leap Hawk

192

ฉันคิดว่าonSupportNavigateUp()เป็นวิธีที่ดีที่สุดและง่ายที่สุดให้ทำตามขั้นตอนด้านล่าง ขั้นตอนที่ 1 เป็นสิ่งที่จำเป็นขั้นตอนที่สองมีทางเลือก

ขั้นตอนที่ 1 แสดงปุ่มย้อนกลับ:เพิ่มบรรทัดนี้ในonCreate()วิธีการเพื่อแสดงปุ่มย้อนกลับ

assert getSupportActionBar() != null;   //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true);   //show back button

การติดตั้งย้อนกลับขั้นตอนที่ 2:แทนที่วิธีนี้

@Override
public boolean onSupportNavigateUp(){  
    finish();  
    return true;  
}

นั่นเป็นสิ่งที่คุณทำ
หรือขั้นตอนที่ 2 ทางเลือก:คุณสามารถเพิ่มเมตาให้กับกิจกรรมในไฟล์รายการเป็น

<meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="MainActivity" />

แก้ไข:หากคุณไม่ได้ใช้AppCompatกิจกรรมอย่าใช้supportคำคุณสามารถใช้

getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`

// And override this method
@Override 
public boolean onNavigateUp(){ 
     finish(); 
     return true; 
}

ขอบคุณ @atariguy สำหรับความคิดเห็น


2
โซลูชันนี้ใช้งานได้ดีเมื่อคุณต้องการส่งข้อมูลกลับไปที่กิจกรรมหลักหรือถ้าคุณต้องการรักษาคุณค่าของ EditText ในกิจกรรมหลัก ฉันลองonOptionsItemSelectedวิธีแก้ปัญหา แต่ไม่สามารถทำได้
weeix

3
ทางออกที่ดีที่สุด +10
Satheeshwaran

3
หากคุณไม่ได้ใช้ไลบรารีการสนับสนุนสำหรับ Actionbar ให้แก้ไขดังต่อไปนี้: getActionBar().setDisplayHomeAsUpEnabled(true); @Override public boolean onNavigateUp(){ finish(); return true; }
atariguy

1
มหัศจรรย์ +1 ง่าย สง่า สวย. :)
Rohit Kumar

1
ขอบคุณสำหรับความช่วยเหลือของคุณ. โดยใช้ไฟล์ Manifest มันไม่ทำงาน แต่ใช้รหัสมันใช้งานได้
santosh devnath

70

ความมหัศจรรย์เกิดขึ้นonOptionsItemSelectedค่ะ

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; go home
            Intent intent = new Intent(this, HomeActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

1
ในกรณีของฉันฉันต้องการเพิ่มปุ่มย้อนกลับในหน้านั้นซึ่งเหตุการณ์ onOptionsItemSelected (รายการ MenuItem) จะไม่อยู่ที่นั่น ... มีวิธีแก้ไขปัญหาอื่นอีกหรือไม่?
Vidhi

1
คุณควรเพิ่มgetActionBar().setDisplayHomeAsUpEnabled(true);onCreateMethod ก่อนเพื่อแสดงปุ่มย้อนกลับ
aletede91

1
ฉันคิดว่าถ้าคุณทำเช่นนี้คุณจะไม่กลับไปแม้ว่าคุณจะเริ่มกิจกรรมก่อนหน้านี้อีกครั้งโดยมีหนึ่งอินสแตนซ์ของมันมากขึ้นและคุณจะไปข้างหน้าและข้างหน้าเสมอไปจนกว่ากองล้นจะเกิดขึ้น ฉันคิดว่าคำตอบของ Igor นั้นถูกต้องคุณควรหยุดกิจกรรมนี้ด้วย finish () และให้เฟรมเวิร์กนำคุณกลับไปที่อินสแตนซ์ของกิจกรรมก่อนหน้านี้ที่กำลังทำงานอยู่
Reijo Korhonen

2
ใช้this.onBackPressed();วิธีการเมื่อผู้ใช้คลิกปุ่มย้อนกลับ
CaptRisky

47

ทางออกที่เป็นทางการ

เพิ่มตัวอย่างโค้ดทั้งสองเข้าไปใน SubActivity ของคุณ

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

เพิ่ม meta-data และ parentActivity ให้กับรายการเพื่อรองรับ sdk ที่ต่ำกว่า

 <application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.SubActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

การอ้างอิงที่นี่: http://developer.android.com/training/implementing-navigation/ancestral.html


5
หมายเหตุ: หากใช้ไลบรารีการสนับสนุนสำหรับความเข้ากันได้แบบย้อนหลังคุณจะต้องใช้ "getSupportActionBar ()" แทน "getActionBar ()" นี่คือคำตอบที่สมบูรณ์แบบที่สุดและเป็นทางการ
คริสโตเฟอร์บูลล์

32

เพิ่มบรรทัดเหล่านี้ไปยัง onCreate ()

android.support.v7.app.ActionBar actionBar = getSupportActionBar();
   actionBar.setHomeButtonEnabled(true);
   actionBar.setDisplayHomeAsUpEnabled(true);

และใน onOptionItemSelected

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                //Write your logic here
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

หวังว่าสิ่งนี้จะช่วยคุณ .. !


27

ลองใช้รหัสนี้พิจารณาเมื่อคุณต้องการปุ่มย้อนกลับเท่านั้น

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //YOUR CODE
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //YOUR CODE
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

17

ในonCreateวิธีการของคุณเพิ่ม:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

ขณะกำหนดAndroidManifest.xmlกิจกรรมหลัก (กิจกรรมที่จะถูกเรียกเมื่อกดปุ่มย้อนกลับในแถบการกระทำ):

ใน<activity>คำจำกัดความของคุณเกี่ยวกับรายการให้เพิ่มบรรทัด:

android:parentActivityName="com.example.activities.MyParentActivity"

คุณจะต้องใส่รหัส Manifest ในกรณีที่คุณต้องการรองรับอุปกรณ์ pre-4.0 เท่านั้น โค้ดแรกเป็นทางออกที่ดีกว่าสำหรับไลบรารี่ปัจจุบัน
Louie Bertoncin

8

ฉันรู้ว่าฉันช้าไปหน่อย แต่ก็สามารถแก้ไขปัญหานี้ได้โดยการติดตามเอกสารโดยตรง

เพิ่มเมตาดาต้า - แท็กลงในAndroidManifest.xml(เพื่อให้ระบบทราบ)

 <activity
        android:name=".Sub"
        android:label="Sub-Activity"
        android:parentActivityName=".MainChooser"
        android:theme="@style/AppTheme.NoActionBar">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainChooser" />
    </activity>

จากนั้นเปิดใช้งานปุ่มย้อนกลับ (up) ในของคุณ MainActivity

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_child);
 
    // my_child_toolbar is defined in the layout file 
    Toolbar myChildToolbar =
        (Toolbar) findViewById(R.id.my_child_toolbar);
    setSupportActionBar(myChildToolbar);
 
    // Get a support ActionBar corresponding to this toolbar 
    ActionBar ab = getSupportActionBar();
 
    // Enable the Up button 
    ab.setDisplayHomeAsUpEnabled(true);
    } 

และคุณจะถูกตั้งค่าทั้งหมด!

ที่มา: เอกสารสำหรับนักพัฒนา Android


6

ฉันรู้ว่าข้างต้นเป็นวิธีแก้ปัญหาที่เป็นประโยชน์มากมาย แต่คราวนี้ฉันอ่านบทความนี้ (ปัจจุบัน Android Studio 2.1.2 กับ sdk 23) วิธีการบางอย่างข้างต้นไม่ทำงาน

ด้านล่างนี้เป็นโซลูชันของฉันสำหรับกิจกรรมย่อยคือ MapsActivity

ก่อนอื่นคุณต้องเพิ่ม parentActivity ใน

AndroidManifest.xml

แบบนี้ :

<application ... >
    ...
    <!-- Main activity (which has no parent activity) -->
    <activity
        android:name="com.example.myapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        .....
        android:parentActivityName=".MainActivity" >
        <!-- Support Parent activity for Android 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myapp.MainActivity" />
    </activity>
</application>

ประการที่สองตรวจสอบให้แน่ใจว่ากิจกรรมย่อยของคุณขยายออกAppCompatActivityไม่ใช่ FragmentActivity

ประการที่สามonOptionsItemSelected()วิธีการแทนที่

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon action bar is clicked; go to parent activity
                this.finish();
                return true;
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

หวังว่านี่จะช่วยได้!


4

ลองนี้ใน onCreate ของคุณ ()

 getActionBar().setHomeButtonEnabled(true);
 getActionBar().setDisplayHomeAsUpEnabled(true);

และสำหรับกิจกรรมคลิก

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // app icon in action bar clicked; goto parent activity.
                this.finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

4

เพื่อให้บรรลุนี้มีเพียงสองขั้นตอนคือ

ขั้นตอนที่ 1: ไปที่AndroidManifest.xmlและเพิ่มพารามิเตอร์นี้ใน<activity>แท็ก -android:parentActivityName=".home.HomeActivity"

ตัวอย่าง:

<activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

ขั้นตอนที่ 2: ActivityDetailเพิ่มของคุณactionสำหรับหน้า / กิจกรรมก่อนหน้า

ตัวอย่าง:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return super.onOptionsItemSelected(item);
}

4

ในวิธีการ onCreate เขียน -

Toolbar toolbar = findViewById(R.id.tool);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
}
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
@Override
public void onBackPressed() {
    super.onBackPressed();
    startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
    finish();
}

และนี่คือไฟล์ xml-

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:id="@+id/tool">

และใน styles.xml ให้เปลี่ยนเป็น

Theme.AppCompat.Light.NoActionBar

นี่คือทั้งหมดที่เราต้องทำ


4

มันง่ายและใช้งานได้ดีสำหรับฉัน

เพิ่มวิธีนี้ภายใน onCreate ()

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

เพิ่มเมธอด oncreate () ภายนอกนี้

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

3

ในonCreate()วิธีการของคุณเพิ่มบรรทัดนี้

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

และในกิจกรรมเดียวกันให้เพิ่มวิธีนี้เพื่อจัดการกับการคลิกปุ่ม

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        this.finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

2

ฉันแก้ไขด้วยวิธีนี้

@Override
public boolean  onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onBackPressed(){
    Intent backMainTest = new Intent(this,MainTest.class);
    startActivity(backMainTest);
    finish();
}

1

รหัสทำงานของฉันเพื่อกลับไปที่หน้าจอ

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {

    case android.R.id.home:

        Toast.makeText(getApplicationContext(), "Home Clicked",
                Toast.LENGTH_LONG).show();

        // go to previous activity
        onBackPressed();

        return true;

    }

    return super.onOptionsItemSelected(item);
}

1
 public void initToolbar(){
       //this set back button 
       getSupportActionBar().setDisplayHomeAsUpEnabled(true);
       //this is set custom image to back button
       getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_btn_image);
}


//this method call when you press back button
@Override
public boolean onSupportNavigateUp(){
    finish();
    return true;
}

1
ActionBar actionBar=getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

@Override
public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) {
        case android.R.id.home: 
            onBackPressed();
            return true;
        }

    return super.onOptionsItemSelected(item);
}

1

มันอาจจะสายเกินไปที่จะตอบ แต่ฉันมีวิธีแก้ปัญหาที่สั้นกว่าและใช้งานได้มากกว่าในความคิดของฉัน

// Inside your onCreate method, add these.
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);

// After the method's closing bracket, add the following method exactly as it is and voiulla, a fully functional back arrow appears at the action bar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return true;
}

1

ใน oncreate (); เขียนบรรทัดนี้ ->

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

จากนั้นใช้วิธีการด้านล่างในชั้นเรียนนั้น

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case android.R.id.home:
        // app icon in action bar clicked; go home
      onBackPressed();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

1

Manifest.xml

<activity
            android:name=".Activity.SecondActivity"
            android:label="Second Activity"
            android:parentActivityName=".Activity.MainActivity"
            android:screenOrientation="portrait"></activity>

1

เพื่อที่จะแสดงปุ่มย้อนกลับแถบการกระทำใน Kotlin มี 2 ​​วิธีในการติดตั้ง

1. ใช้ Action Bar เริ่มต้นที่จัดทำโดย Android - กิจกรรมของคุณต้องใช้ชุดรูปแบบที่มี Action Bar - เช่น: Theme.AppCompat.Light.DarkActionBar

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val actionBar = supportActionBar
    actionBar!!.title = "your title"
    actionBar.setDisplayHomeAsUpEnabled(true)
    //actionBar.setDisplayHomeAsUpEnabled(true)
}

override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}

2. ออกแบบแถบการกระทำของคุณเอง - ปิดใช้งานแถบการกระทำเริ่มต้น - เช่น: Theme.AppCompat.Light.NoActionBar - เพิ่มเค้าโครงลงใน activity.xml ของคุณ

    <androidx.appcompat.widget.Toolbar
     android:id="@+id/main_toolbar"
     android:layout_width="match_parent"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toTopOf="parent">

     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         tools:layout_editor_absoluteX="16dp">

         <TextView
             android:id="@+id/main_toolbar_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="Your Title"
             android:textSize="25sp"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_bias="0.5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

     </androidx.constraintlayout.widget.ConstraintLayout>
 </androidx.appcompat.widget.Toolbar>
  • onCreate
override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)

     setSupportActionBar(findViewById(R.id.main_toolbar))
 }
  • สร้างปุ่มของคุณเอง
<?xml version="1.0" encoding="utf-8"?>
<menu
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto" >

 <item
     android:id="@+id/main_action_toolbar"
     android:icon="@drawable/ic_main_toolbar_item"
     android:title="find"
     android:layout_width="80dp"
     android:layout_height="35dp"
     app:actionLayout="@layout/toolbar_item"
     app:showAsAction="always"/>

</menu>
  • ใน YourActivity.kt
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
     menuInflater.inflate(R.menu.main_toolbar_item, menu)

     leftToolbarItems = menu!!.findItem(R.id.main_action_toolbar)
     val actionView = leftToolbarItems.actionView
     val badgeTextView = actionView.findViewById<TextView>(R.id.main_action_toolbar_badge)
     badgeTextView.visibility = View.GONE

     actionView.setOnClickListener {
         println("click on tool bar")
     }
     return super.onCreateOptionsMenu(menu)
 }

0

เพิ่มรหัสด้านล่างในฟังก์ชั่น onCreate:

getSupportActionBar () setDisplayHomeAsUpEnabled (จริง).

แล้วแทนที่: @Override บูลีนสาธารณะ onOptionsItemSelected (รายการเมนูรายการ) {onBackPressed (); กลับจริง }


0

ในรุ่นที่ได้รับการปรับปรุง getActionBar () ไม่ทำงาน!

แต่คุณสามารถทำได้ด้วยวิธีนี้

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

เพิ่มปุ่มย้อนกลับในแถบชื่อเรื่องของ Androidซึ่งจะช่วยคุณได้ในปี 2020


คำตอบสุดท้ายของคุณทั้งคู่เชื่อมโยงไปยังเว็บไซต์เดียวกัน คุณมีความเกี่ยวข้อง / มีส่วนเกี่ยวข้องกับเว็บไซต์นั้น แต่อย่างใด? หากคุณเป็นพันธมิตรคุณต้องเปิดเผยความร่วมมือในโพสต์นั้น หากคุณไม่เปิดเผยการเป็นพันธมิตรถือว่าเป็นสแปม ดู: การส่งเสริมตัวเองของ "ดี" หมายถึงอะไร? , เคล็ดลับและคำแนะนำเกี่ยวกับการส่งเสริมตนเอง , ความหมายที่แท้จริงของ "สแปม" สำหรับกองมากเกินคืออะไร? และสิ่งที่ทำให้บางสิ่งบางอย่างสแปม
Makyen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.